Issue #7505 has been updated by tarui (Masaya Tarui).


å¤???????????????????äº????????????¨ã??????????®ã?§ã????????

mutex=Mutex.new
Thread.new{
  mutex.synchronize{
    begin
      sleep 1
      mutex.sleep
    ensure
      ??ªã?½ã?¼ã?¹è§£???
    end
  }
}
mutex.syncronize{
  sleep 10
}

mutex.sleep???mutex????????¾ã????¦ã???????????C-c????????????mutex???確ä?????????????¨ã????????確ä????§ã????ªã????£ã????¨ã????¦ã??
??????mutex???確ä???????¦ã?????Thread???æ­»ã?ªã?ªã????¨è???????ªã????®ã?§ã????????mutex??¯è§£??¾ã???????¦ã??
mutex.sleep??®æ?¹ã??mutex???????????????????????¡ã????§ã???????????ï¼?

??ªã?®ã?§ã??mutex??????????????¾ã?§å????¤ã???????«ä¿®æ­£ã???????¹é???????¼ã??????????¨æ???????¾ã?????
??¤ã?¾ã?????1,2,3???????????®ä????§ã??mutex???ä¿??????????ensure??«å?¥ã??????????«ã???????????

----------------------------------------
Feature #7505: Mutex#owned? ??¡ã?½ã???????®æ?°è¨­
https://bugs.ruby-lang.org/issues/7505#change-34366

Author: kosaki (Motohiro KOSAKI)
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: next minor


以ä????®ã???????ªã????­ã?°ã?©ã??????????£ã????¨ã????¾ã?????

Thread.async_interrupt_timing(Object => :on_blocking) {
  begin
??????mutex = Mutex.new
    mutex.synchronize {
       sleep 1
       condvar.wait mutex
  ???}
  ensure
    ??ªã?½ã?¼ã?¹è§£??¾ã????????
  end
}

mutex.synchronize??®ä¸­???Ctrl-c?????¼ã???????¨ã???????²ã??è¾¼ã?¾ã???????½æ?§ã?®ã?????ç®???????ä¸???¶æ??????????¾ã??

1) sleep
2) mutex.sleep?????®ä¸­???native_sleepï¼?condvar.signal å¾???¡ï??
3) mutex.sleep?????®ä¸­???rb_mutex_lock(condvar.signal??§èµ·åº????????????????mutex?????¥ã?¹ã?¬ã????????使ç?¨ä¸­?????£ã????????mutexå¾???¡ï??

?????®ã?¨ã?????ï¼???¨ï?????mutex????????£ã????¾ã??ensure??«å?¥ã????¾ã????????ï¼????mutex???????????????ensure??«å?¥ã?£ã?¦ã????¾ã?????????????«æ?ªã???????¨ã?«ï????¨ï?????Ruby????????¯å???????¡ã?½ã??????????«ã??????????????ruby??¬ã????«ã?? workaround????????????????????¨ã????§ã????¾ã????????

??ªã?½ã?¼ã?¹ã??æ­£ã????£æ?¾ã????????段ã???????ªã???????¨ã???????®ã?¯å????§ã???????®ã?§ã??Mutex#owned? ??¡ã?½ã???????®æ?°è¨­??????æ¡??????¾ã??????????????Mutex#locked? ??¨ã?¯ç?°ã?ªã????ªå???????­ã????¯ã???????£ã?¦ã???????¨ã????®ã??true???è¿??????¾ã??

???????????¥Ã轡¦èº?

https://gist.github.com/4195632

以ä??ä½?è«????POSIX?????¨ã??pthread_cond_wait??¯ã?­ã?£ã?³ã?»ã?¬ã?¼ã?·ã?§ã?³ã????¤ã?³ã????§ã?¯ã?ªã??????????ªã?«ã?????????????¨ã??Mutex???lock???çµ?????£ã?¦ã???????¢æ?°ã??????????¦ã??????®ã?§ã????????????????¯ã???????¾ã????????????????«æ??????????¨ã???????????????????®ã?§ã??????????????????????¨å?¥ã?¹ã?¬ã??????????­ã????¯ã???????£ã????¾ã?¾ã?§ã????????Ctrl-C?????¹ã????ªã???ªã????®ã??akr????????®å¥½??¿ã?«ã?¯ã??????ªã???????????




-- 
http://bugs.ruby-lang.org/