java - Cas操作会加锁吗
怪我咯
怪我咯 2017-04-18 10:52:40
0
1
735

问题:
(1)不需要cas操作来加锁和解锁,这个怎么理解??cas操作不是如果比较不成功那么就一直尝试吗?和加锁有什么关系??这个该如何理解

怪我咯
怪我咯

走同样的路,发现不同的人生

membalas semua(1)
刘奇

Operasi perbandingan dan pertukaran mungkin tidak memerlukan kunci, bergantung pada platform, tetapi kebanyakan platform menyokong cas tanpa kunci. Kunci paling mudah ialah kunci putaran yang dilaksanakan melalui ujian dan set Sudah tentu, ia juga boleh dilaksanakan melalui cas.

Kunci putaran sememangnya akan terus mencuba apabila kunci gagal, meletihkan sumber CPU. Seperti

while (flag.test_and_set()) { /* yield; */ } // 上锁
flag.clear(); // 解锁

Kunci yang disediakan oleh antara muka sistem biasanya akan menggantung benang apabila kunci gagal, sama seperti

while (flag.test_and_set()) { flag.wait_for_unlock_signal(); } // 上锁

wait_for_unlock_signal() di sini ialah fungsi khayalan. Tetapi penguncian masih bergantung pada operasi atom seperti cas. Dalam erti kata lain, kunci kini dilaksanakan melalui beberapa operasi asas atom, seperti ujian dan set dan bandingkan dan tukar.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan