Моя функция должна остановить поток, только если запущено n потоков, включая себя самого.Linux

Ответить
Anonymous
 Моя функция должна остановить поток, только если запущено n потоков, включая себя самого.

Сообщение Anonymous »

Потоку T12 разрешено завершаться только во время работы 6 потоков (с
и с ним самим).
Мой код выполняется, но он превышает лимит времени. п>
int runningTh = 0 ;

pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

bool t12In = false ;

void* function6(void *args){
THREAD_struct * t1 = (THREAD_struct*) args ;

if(t1->id != 12){
pthread_mutex_lock(&lock) ;
while(t12In == false ){
pthread_cond_wait(&cond ,&lock);
}
pthread_mutex_unlock(&lock) ;
}
pthread_mutex_lock(&lock) ;

runningTh++;
if (runningTh == simThreads ){
pthread_cond_broadcast(&cond) ;
}
while(t1->id != 12 && runningTh id == 12) {
t12In = true ;
pthread_cond_broadcast(&cond) ;
while (runningTh < simThreads){
pthread_cond_wait(&cond ,&lock);
}
}
pthread_mutex_unlock(&lock);

pthread_mutex_lock(&lock);
if (t1->id == 12) {
t12In = true ; runningTh++ ;
pthread_cond_broadcast(&cond) ;
}
pthread_mutex_unlock(&lock);

return NULL;
}


Подробнее здесь: https://stackoverflow.com/questions/784 ... ing-itself
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»