1

我的进程有两个线程,如下所示

@semaphore = Mutex.new
.
.
.
.
thread_a = Thread.new {
  loop do
    #some work
    if(some_condition) 
      @semaphore.synchronize {
        @thread_b_running = false
      }
    end
  end
}

thread_b = Thread.new {
  while(@semaphore.synchronize { @thread_b_running }) do
    #thread_b's work
  end
}
thread_a.join
thread_b.join

基本上,并行thread_athread_b做一些工作,但是当thread_a看到一个事件发生时,它需要关闭thread_b。正如您现在所看到的,我正在通过使用受互斥体保护的布尔值来做到这一点。我认为这种方法在性能方面并不算太差,因为thread_b几乎总是会在不等待的情况下获得锁。但是,由于我没有编写很多多线程代码,我想知道是否有更好的方法来做我正在做的事情?

4

1 回答 1

0

如果只有一个线程正在写入变量,则不需要互斥锁。因此,在您的示例中,一个更好的方法就是删除互斥锁。

于 2013-08-31T02:29:38.747 回答