91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
甘德县| 海宁市| 肃宁县| 武夷山市| 二连浩特市| 黎川县| 湛江市| 广水市| 昌乐县| 襄汾县| 安岳县| 安吉县| 赫章县| 仙游县| 绥德县| 龙泉市| 鄂州市| 大新县| 渭南市| 屏边| 兰西县| 缙云县| 饶平县| 拜城县| 南开区| 长岭县| 莲花县| 安庆市| 怀安县| 大港区| 灵寿县| 高陵县| 田林县| 闸北区| 清苑县| 桃源县| 松溪县| 固原市| 黄山市| 临泽县| 襄垣县|