多线程同步的释放句柄的问题 ( 积分: 0 )

  • 主题发起人 主题发起人 powater
  • 开始时间 开始时间
P

powater

Unregistered / Unconfirmed
GUEST, unregistred user!
在多线程同步的程序中,无论是利用互斥量,还是临界区,互斥事件和信号量,使用完毕都要删除句柄(hmutex,..),那么如何才能保证在最后一个线程执行完了才删除呢?因为使用这些api时候都利用了waitforsingleobject函数,但是多个线程都在等待信号的时候,应该是抢先式的(除了第一个先执行的线程),那么在哪个线程onTerminate中才能删除那些句柄呢?提前删除应该不能保证同步的!!
 
在多线程同步的程序中,无论是利用互斥量,还是临界区,互斥事件和信号量,使用完毕都要删除句柄(hmutex,..),那么如何才能保证在最后一个线程执行完了才删除呢?因为使用这些api时候都利用了waitforsingleobject函数,但是多个线程都在等待信号的时候,应该是抢先式的(除了第一个先执行的线程),那么在哪个线程onTerminate中才能删除那些句柄呢?提前删除应该不能保证同步的!!
 
增加1个全局计数器Counter,在每个线程式的onTerminate中加入:
Dec(Counter);
if Counter=0 then
这是最后一个执行完的线程
 
hehe
谢谢lab01兄弟。不过不好意思的是这个问题没有设置积分,因为我原来我很少上这个论坛的,所以对于积分问题我当时发这个帖子的时候我还不是很清楚。不知道怎么就设置成了0,真的不好意思哈。
 
后退
顶部