Ở đây, chúng ta phải in 1 2 3 chuỗi lặp đi lặp lại với số lần vô hạn bằng cách sử dụng các chuỗi trong ngôn ngữ lập trình c.
Hãy xem kết quả đầu ra mẫu mà chúng tôi muốn từ mã của mình,
1 2 3 1 2 3 1 2 3 1 2 3
Đối với điều này, chúng ta sẽ phải sử dụng ba luồng chạy song song với nhau trong ngôn ngữ lập trình C. Và một biến được khởi tạo thành một trong luồng đầu tiên có giá trị sẽ được cập nhật dựa trên giá trị cuối cùng của nó. Và chạy một vòng lặp vô hạn trong hàm.
Ví dụ
Hãy xem chương trình triển khai giải pháp của chúng tôi,
#include <stdio.h> #include <pthread.h> pthread_cond_t cond1 = PTHREAD_COND_INITIALIZER; pthread_cond_t cond2 = PTHREAD_COND_INITIALIZER; pthread_cond_t cond3 = PTHREAD_COND_INITIALIZER; pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; int value = 1; void *foo(void *n){ while(1) { pthread_mutex_lock(&lock); if (value != (int)*(int*)n) { if ((int)*(int*)n == 1) { pthread_cond_wait(&cond1, &lock); } else if ((int)*(int*)n == 2) { pthread_cond_wait(&cond2, &lock); } else { pthread_cond_wait(&cond3, &lock); } } printf("%d ", *(int*)n); if (value == 3) { value = 1; pthread_cond_signal(&cond1); } else if(value == 1) { value = 2; pthread_cond_signal(&cond2); } else if (value == 2) { value = 3; pthread_cond_signal(&cond3); } pthread_mutex_unlock(&lock); } return NULL; } int main(){ pthread_t tid1, tid2, tid3; int n1 = 1, n2 = 2, n3 = 3; pthread_create(&tid1, NULL, foo, (void *)&n1); pthread_create(&tid2, NULL, foo, (void *)&n2); pthread_create(&tid3, NULL, foo, (void *)&n3); while(1); return 0; }
Đầu ra
1 2 3 1 2 3 1 2 3 1 2 3 1 2 3….