Я пишу программу на C, где мне нужно многопоточность (pthread).
Поток создается несколько раз, скажем, 5. Я использую ncurses
(вид графических окон в терминале), где я добавил несколько кнопок, и я хочу нажать на кнопку, чтобы приостановить поток, и нажать еще раз, чтобы возобновить его.
Эти потоки работают вместе и связаны с другим потоком, который блокирует эти потоки до тех пор, пока не будет выполнено допустимое условие, а затем позволит им продолжать работать (для этого я использую условные переменные и мьютекс).
Я заблокирован тем, как можно приостановить один поток. Я думал о создании условной переменной, но если я делаю это, мне нужна условная переменная для каждого потока. Я нашел функцию с именем pthread_kill
, но она не работает и останавливает всю программу.
У многих людей такая же проблема, есть ли способ сделать это, используя сигналы?
Я не знаю, полезен ли код, потому что мне нужна идея, но я все равно ее формулирую.
Это функция потока, которая будет повторяться 5 раз
void* update(void* arg)
{
int statut;
threadUpdate tu;
tu = *(threadUpdate*)arg;
while(1)
{
statut = pthread_mutex_lock(&mutex);
if(statut!=0)
{
fprintf(stderr, "Erreur lock mutex\n");
}
scene_update2(tu.scene, tu.i);
/*scene_update(tu.scene);*/
*(tu.traitementTermine)=*(tu.traitementTermine)+1;
if(*(tu.traitementTermine)==*(tu.nbObjets))
{
statut = pthread_cond_signal(&cond1);
if(statut!=0)
{
fprintf(stderr, "Erreur cond signal\n");
}
}
statut = pthread_cond_wait(&cond2,&mutex);
if(statut!=0)
{
fprintf(stderr, "Erreur cond wait\n");
}
statut = pthread_mutex_unlock(&mutex);
if(statut!=0)
{
fprintf(stderr, "Erreur unlock mutex\n");
}
}
return NULL;}
Поток, который будет создан один раз, просто содержит мьютекс для управления условной переменной с другими потоками. Это работает, и у меня нет проблем с этим.