Rumah  >  Soal Jawab  >  teks badan

java - Cas操作会加锁吗

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

怪我咯怪我咯2743 hari yang lalu701

membalas semua(1)saya akan balas

  • 怪我咯

    怪我咯2017-04-18 10:54:40

    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.

    balas
    0
  • Batalbalas