中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
玛纳斯县| 太谷县| 咸阳市| 东丰县| 鄂尔多斯市| 溧阳市| 会同县| 龙江县| 宜宾县| 如皋市| 峨眉山市| 新泰市| 勐海县| 新乐市| 兖州市| 五寨县| 连云港市| 马尔康县| 萨迦县| 保山市| 嘉黎县| 五台县| 山阳县| 大名县| 兴化市| 大同县| 阿图什市| 横山县| 舞钢市| 忻州市| 成安县| 湟源县| 德州市| 平遥县| 方城县| 济宁市| 原平市| 新蔡县| 潼关县| 卢龙县| 黎川县|