怎么實(shí)現(xiàn)所有線程在等待某個(gè)事件的發(fā)生才會(huì)去執(zhí)行?
可以使用信號(hào)量(Seamphone)
Windows 和 Linux 的基本概念是一樣的。
信號(hào)量相當(dāng)于一個(gè)原子計(jì)數(shù)器,等待的線程數(shù)就是計(jì)數(shù)器的最大數(shù)。等待線程等待時(shí)嘗試讓計(jì)數(shù)器減1,成功就繼續(xù)執(zhí)行,失敗就等待。
執(zhí)行線程在需要喚醒等到線程時(shí),讓計(jì)數(shù)器等于等待線程數(shù)(release操作),這樣每個(gè)等待的線程都可以成功減1,進(jìn)而繼續(xù)執(zhí)行了。
所有線程都等待(wait)這個(gè)信號(hào)量,一旦某個(gè)事件發(fā)生,則執(zhí)行線程就釋放這個(gè)信號(hào)量(release)。