問題的背景上的並行線程問題工作:有5個線程使用相同的功能,並且當在所述共享核心數據內存命中上限,所有這五個線程應該終止。我使用信號量來確保其中只有一個執行核心數據,這意味着只有五個中的一個會得到結束信號,然後它會告訴其餘的結束。我寫了實現的代碼是:
#define THREAD_NUM 5;
int thread[THREAD_NUM];
sem_t s; /*semaphore to synchronize*/
sem_t empty; /*keep check of the number of empty buffers*/
sem_t full; /*keep check of the number of full buffers*/
void com_thread(*prt){ // I pass the id of the thread using prt
while(1){
sem_wait(&full)
sem_wait(&s)
...do something
sem_post(&s)
sem_post(&empty)
}
}
while循環運行時,信號會來,我試圖在以下位置接受信號,然後終止所有的線程。
說實話,我需要做的就是優雅地結束所有線程,我需要它們返回到thread_join()的主線程並釋放內存,而不是簡單地退出程序。所以這就是爲什麼我沒有在這裏使用exit()。
下面的主要想法是當其中一個獲得信號時終止其他4個線程。之後它會自行終止。
但是,它不工作,因爲我預期。
#define THREAD_NUM 5;
int thread[THREAD_NUM];
sem_t s; /*semaphore to synchronize*/
sem_t empty; /*keep check of the number of empty buffers*/
sem_t full; /*keep check of the number of full buffers*/
void com_thread(*prt){ // I pass the id of the thread using prt
while(1){
sem_wait(&full)
sem_wait(&s)
if(signal){
int i;
int id = *((int*) prt);
for (i=0;i<THREAD_NUM;i++){
if(i != id)
pthread_exit(&thread[i]);
}
pthread_exit(&thread[id]);
}
...do something
sem_post(&s)
sem_post(&empty)
}
}
任何人都可以幫助我嗎?或者,如果有更好的方法來實現這一目標?在此先感謝:)