在Linux C上同步两个线程可以使用互斥锁(Mutex)和条件变量(Condition Variable)来实现。
互斥锁是一种同步原语,用于保护共享资源,确保在同一时间只有一个线程可以访问该资源。在C语言中,可以使用pthread库提供的互斥锁相关函数来操作互斥锁。常用的函数有pthread_mutex_init、pthread_mutex_lock、pthread_mutex_unlock和pthread_mutex_destroy。
条件变量用于线程之间的通信和同步。它允许一个线程等待另一个线程满足某个条件后再继续执行。在C语言中,可以使用pthread库提供的条件变量相关函数来操作条件变量。常用的函数有pthread_cond_init、pthread_cond_wait、pthread_cond_signal和pthread_cond_destroy。
下面是一个示例代码,演示了如何在Linux C上同步两个线程:
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex;
pthread_cond_t cond;
int sharedData = 0;
void* thread1(void* arg) {
pthread_mutex_lock(&mutex);
while (sharedData < 10) {
// 等待条件变量满足
pthread_cond_wait(&cond, &mutex);
}
printf("Thread 1: sharedData = %d\n", sharedData);
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
void* thread2(void* arg) {
pthread_mutex_lock(&mutex);
sharedData = 10;
// 发送信号通知等待的线程条件已满足
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
pthread_exit(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;
}
在上述代码中,我们创建了两个线程t1和t2。线程t1等待条件变量满足后打印sharedData的值,而线程t2在修改sharedData后发送信号通知t1条件已满足。通过互斥锁和条件变量的配合,实现了线程之间的同步。
这里推荐腾讯云的云服务器(CVM)产品,它提供了高性能、可靠稳定的云服务器实例,适用于各种应用场景。您可以通过以下链接了解更多信息:https://cloud.tencent.com/product/cvm
领取专属 10元无门槛券
手把手带您无忧上云