2012-08-03 55 views
0

我在Linux下使用phtreads和C編寫應用程序。主函數啓動一堆線程(最多20個)。然後,根據一些標準,我需要立即停止所有線程。每個線程在某些條件循環運行,如:Linux,pthreads - 發送停止條件

while (state) {....} 

所以我需要改變狀態,以假爲每個線程(我覺得目前它是足有一個狀態爲每個線程,但也許在未來我將不得不單獨停止每個線程)

那麼,最好的方法是什麼?我可以使用一些狀態作爲全局變量並使用它的互斥體。每次我必須鎖定,閱讀,解鎖才能閱讀它的價值。我認爲這是一個耗時的程序。你有任何其他想法如何實現它?

回答

1

#男子pthread_cancel可以

允許你發送取消請求的線程。

#男子pthread_cleanup_push

允許您設置消除例行程序。

+0

謝謝。這些例程看起來相當複雜,但我想沒有其他方法可以取消正在運行的線程。順便說一句,其實是安全的?我的意思是,如果我將pthread_cancel()與pthread_setcanceltype一起作爲延遲調用,是不是像'用錘子讓人睡覺? – 2012-08-03 06:41:25

+0

是的..否則pthread_join將幫助你等待線程,直到它執行它的例程。 – 2012-08-03 06:51:39

+0

其實我已經在使用pthread_join()了。但是,正如我所說的,我在每個線程中使用了一些無限循環(線程與串口進行圓頂通信),它本身不會*終止*。但是,據我從手冊頁讀取,pthread_cancell()停止線程的終止,只要它達到任何所謂的*消除函數*。我在我的線程無限循環的開始處使用read()和write(),並且read()和write()在取消函數列表(man pthreads)中。所以我希望,當我做pthread_cancell()我的線程將被取消,因爲我期望 – 2012-08-03 06:58:00