Введите количество потоков: 4
Поток 1 имеет идентификатор потока_140282626569792, сообщение 1
Поток 2 имеет идентификатор потока_140282618177088, сообщение 1Поток 3 имеет идентификатор потока_140282609784384, сообщение 1
Поток 4 имеет идентификатор потока_140282601391680, сообщение 1
Поток 1 имеет идентификатор потока_140282626569792, сообщение 1
Поток 2 имеет идентификатор потока_140282618177088 , сообщение 1
Поток 3 имеет идентификатор потока_140282609784384, сообщение 1
Поток 4 имеет идентификатор потока_140282601391680, сообщение 1
Поток 1 имеет идентификатор потока_140282626569792, сообщение 1
Поток 2 имеет идентификатор потока_140282618177088, сообщение 1
Тема 3 имеет поток id_140282609784384, сообщение 1
В потоке 4 есть поток id_140282601391680, сообщение 1
..программа завершается, как только я нажимаю ctrl-c
Вместо этого мой вывод:
Поток 1 имеет идентификатор потока_140282626569792, сообщение 1
Поток 2 имеет идентификатор потока_140282618177088, сообщение 1
Поток 3 имеет идентификатор потока_140282609784384, сообщение 1
Поток 4 имеет идентификатор потока_140282601391680 , сообщение 1
Вот мой код:
Код: Выделить всё
#include
#include
#include
#include
#define MAX_THREADS 100
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // Mutex declaration
pthread_cond_t cond_var = PTHREAD_COND_INITIALIZER; // Condition variable initialization
int message_counter[MAX_THREADS] = {0}; // Counter for message printing
int thread_count = 0; // Global thread count
void *printMessage(void *arg) {
long tid = (long)arg;
int num_threads;
pthread_mutex_lock(&mutex);
while(1) {
while (tid != thread_count) {
pthread_cond_wait(&cond_var, &mutex);
}
printf("Thread %ld has thread id_%ld, message %d\n", tid + 1, pthread_self(), message_counter[tid] + 1);
for ( int i=0; i< num_threads; i++) {
message_counter[tid]++;
}
thread_count = (thread_count + 1) % MAX_THREADS;
pthread_cond_broadcast(&cond_var); // Signal all threads that the message has been printed
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
int main() {
pthread_t threads[MAX_THREADS];
int rc;
long t;
int num_threads;
printf("Enter number of threads: ");
scanf("%d", &num_threads);
if (num_threads > MAX_THREADS) {
printf("Maximum number of threads exceeded.\n");
return 1;
}
while(1) {
for (t = 0; t < num_threads; t++) {
rc = pthread_create(&threads[t], NULL, printMessage, (void *)t);
}
if (rc) {
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
for (t = 0; t < num_threads; t++) {
pthread_join(threads[t], NULL);
}
}
pthread_exit(NULL);
}
Подробнее здесь: https://stackoverflow.com/questions/781 ... re-printed