使用C語言中的執行緒無限列印1 2 3
在這裡,我們必須使用C程式語言中的執行緒,無限重複地列印1 2 3 序列。
讓我們看看我們希望從程式碼中獲得的示例輸出:
1 2 3 1 2 3 1 2 3 1 2 3
為此,我們將必須使用三個並行執行的C程式語言執行緒。以及一個在第一個執行緒中初始化為1的變數,其值將根據其最後一個值更新。並在函式中執行無限迴圈。
示例
讓我們看看實現解決方案的程式:
#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;
}輸出
1 2 3 1 2 3 1 2 3 1 2 3 1 2 3….
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP