Я новичок в потоках и, похоже, имею проблему с синхронизацией. Когда я запускаю свой код, мой выход ...Pthreads and signals C++
Полученные данные!
Данные обработаны!
, а затем он просто висит. Я предполагаю, что использую wait и сигнал неправильно. Помощь будет принята с благодарностью.
#include <string.h>
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
char buffer [100];
pthread_mutex_t buffer_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t buffer_cond = PTHREAD_COND_INITIALIZER;
void* threadFunc(void *proc){
if((int)proc == 0){
pthread_mutex_lock(&buffer_mutex);
sprintf(buffer, "Data received!\n");
printf("%s", buffer);
pthread_cond_signal(&buffer_cond);
pthread_mutex_unlock(&buffer_mutex);
}
else if((int)proc == 1){
pthread_mutex_lock(&buffer_mutex);
pthread_cond_wait(&buffer_cond, &buffer_mutex);
sprintf(buffer, "Data processed!\n");
printf("%s", buffer);
pthread_cond_signal(&buffer_cond);
pthread_mutex_unlock(&buffer_mutex);
}
else{
sleep(1);
pthread_mutex_lock(&buffer_mutex);
pthread_cond_wait(&buffer_cond, &buffer_mutex);
sprintf(buffer, "Data sent!\n");
printf("%s", buffer);
pthread_mutex_unlock(&buffer_mutex);
}
return(NULL);
}
int main()
{
pthread_t threads[3];
for(int i = 0; i < 3; i++){
pthread_create(&threads[i], NULL, threadFunc, (void *) i);
}
for(int i = 0; i < 3; i++){
pthread_join(threads[i], NULL);
}
return 0;
}