亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

c語言兩個線程之間怎么通信

小億
107
2023-10-11 20:22:18
欄目: 編程語言

在C語言中,可以使用以下方法實現兩個線程之間的通信:

  1. 全局變量:兩個線程可以共享一個全局變量,并通過對該變量的讀寫來進行通信。需要注意的是,對全局變量的讀寫需要加鎖以避免競爭條件。

示例代碼:

#include <stdio.h>
#include <pthread.h>
int shared_variable = 0;
pthread_mutex_t mutex;
void* thread1(void* arg) {
pthread_mutex_lock(&mutex);
shared_variable = 1;  // 修改共享變量
pthread_mutex_unlock(&mutex);
return NULL;
}
void* thread2(void* arg) {
pthread_mutex_lock(&mutex);
printf("Shared variable: %d\n", shared_variable);  // 讀取共享變量
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
pthread_t t1, t2;
pthread_mutex_init(&mutex, NULL);
pthread_create(&t1, NULL, thread1, NULL);
pthread_create(&t2, NULL, thread2, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
pthread_mutex_destroy(&mutex);
return 0;
}
  1. 條件變量:一個線程等待另一個線程發出特定信號后才繼續執行。其中,等待線程使用pthread_cond_wait()阻塞自己,發送信號的線程使用pthread_cond_signal()pthread_cond_broadcast()發送信號。

示例代碼:

#include <stdio.h>
#include <pthread.h>
int shared_variable = 0;
pthread_mutex_t mutex;
pthread_cond_t cond;
void* thread1(void* arg) {
pthread_mutex_lock(&mutex);
shared_variable = 1;  // 修改共享變量
pthread_cond_signal(&cond);  // 發送信號給等待的線程
pthread_mutex_unlock(&mutex);
return NULL;
}
void* thread2(void* arg) {
pthread_mutex_lock(&mutex);
while (shared_variable == 0) {
pthread_cond_wait(&cond, &mutex);  // 等待信號
}
printf("Shared variable: %d\n", shared_variable);  // 讀取共享變量
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
pthread_t t1, t2;
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond, NULL);
pthread_create(&t1, NULL, thread1, NULL);
pthread_create(&t2, NULL, thread2, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
return 0;
}

以上是兩種常見的線程之間通信的方式,具體使用哪種方式取決于具體的需求和場景。

0
通城县| 稷山县| 韩城市| 福鼎市| 湛江市| 大洼县| 麟游县| 宣汉县| 汤原县| 雷山县| 新闻| 抚顺市| 汉阴县| 阳泉市| 中山市| 西宁市| 廉江市| 碌曲县| 锦屏县| 拉萨市| 海晏县| 达州市| 增城市| 阿城市| 临沂市| 遂昌县| 鄂托克前旗| 滁州市| 双辽市| 南充市| 青冈县| 布拖县| 吉安县| 竹北市| 常熟市| 蒲城县| 宁化县| 巴中市| 丹凤县| 大洼县| 德安县|