Issue #4770 has been updated by Motohiro KOSAKI.

Status changed from Assigned to Closed


----------------------------------------
Bug #4770:  [Q] thread->interrupt_flag  ?????©å????«æ??ä»???¶å¾¡????????¦ã????ªã??????????«è????????
http://redmine.ruby-lang.org/issues/4770

Author: Motohiro KOSAKI
Status: Closed
Priority: Normal
Assignee: Motohiro KOSAKI
Category: core
Target version: 1.9.3
ruby -v: -


 kosaki??§ã??
 
 Ruby VM internal
 ??«è©³????????¹ã????«è³ª????§ã???????¨ã??thread->interrupt_flag??¯ã?©ã???????£ã?¦æ??ä»???¶å¾¡??????????????¶ã?¤ã?³ã?«ã?ªã?£ã?¦ã????¾ã????§ã???????????ï¼?
 
 ??¨ã???????¾ã????®ã??
 
 ï¼?ï¼?????????????¹ã?¯ã?¨ã????¦ä½¿??£ã?¦ã???????®ã?§æ??ä»???¶å¾¡?????ªã????¨ã????©ã?°ã????­ã?¹ã???????¦ã????????äº???«ã?ªã????????
 
 #define RUBY_VM_SET_INTERRUPT(th) ((th)->interrupt_flag |= 0x02)
 #define RUBY_VM_SET_TIMER_INTERRUPT(th) ((th)->interrupt_flag |= 0x01)
 #define RUBY_VM_SET_FINALIZER_INTERRUPT(th) ((th)->interrupt_flag |= 0x04)
 #define RUBY_VM_INTERRUPTED(th) ((th)->interrupt_flag & 0x02)
 
 ï¼?ï¼?²ã??è¾¼ã?¿å?¦ç????§ã????©ã?°ã????ªã?»ã???????????ç®??????§ã??GVL????????¨ã?£ã?¦ã?ªã??
 
 static void
 rb_threadptr_execute_interrupts_rec(rb_thread_t *th, int sched_depth)
 {
 (snip)
 
     while (th->interrupt_flag) {
         enum rb_thread_status status = th->status;
         int timer_interrupt = th->interrupt_flag & 0x01;
         int finalizer_interrupt = th->interrupt_flag & 0x04;
         th->interrupt_flag = 0;
 
 ï¼?ï¼?¿ã?¤ã????¼ã?¹ã?¬ã????????TIMER_INTERRUPT bit???ç«???¦ã???????«ã??timer_thread_lock ???????????£ã?¦ã?ªã??
 
 static void
 timer_thread_function(void *arg)
 {
     rb_vm_t *vm = GET_VM(); /* TODO: fix me for Multi-VM */
 
     /* for time slice */
     RUBY_VM_SET_TIMER_INTERRUPT(vm->running_thread);
 
 ï¼?ï¼?thread.c ??§ã?? RUBY_VM_SET_INTERRUPT??¼ã?¶ã?¨ã????? thread->interrupt_lock ?????????
 cont.c ??§ã?¯å???????ªã??
 
 ï¼?ï¼?gc.c??? RUBY_VM_SET_FINALIZER_INTERRUPT ??¼ã?¶ã?¨ã????«ç?¹ã?«ã?­ã????¯ã??????????ªã??
 
 ??¨ã??????????ªã????ªã????´å????§ã????¨ã????¦ã????ªã??????????ªç?¶æ????«ã?ªã?£ã?¦ã???????????????????§ã???????ªã?«ã??è¦???½ã?¨ã????¦ã????¾ã????§ã???????????ï¼?
 
 ï¼? ä¸???¬ã???????¹ã?? interrupt_lock??§å???????®ã??????????®ã????ªã????¨æ????£ã????®ã?§ã?????????????????????? native_mutex_lock()??¢æ?°ã??
 ï¼? thread.c 以å??????????¯å?¼ã?¹ã?ªã????®ã?§ã????????


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