你能用C语言和pthread库写一个互斥锁的例子吗?
时间: 2023-09-04 14:03:54 浏览: 114
### 回答1:
我可以尝试给出一个示例:
#include <pthread.h>
int main()
{
pthread_mutex_t mutex;
pthread_mutex_init(&mutex, NULL);
pthread_mutex_lock(&mutex);
// 执行需要互斥访问的代码
pthread_mutex_unlock(&mutex);
pthread_mutex_destroy(&mutex);
return 0;
}
### 回答2:
可以的,我来为您写一个用C语言和pthread库实现互斥锁的例子。
首先,我们需要包含必要的头文件:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
```
然后定义一个全局变量count,并初始化为0:
```
int count = 0;
```
接下来,定义一个互斥锁变量mutex,并初始化:
```
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
```
然后,我们编写一个函数,用于线程的工作内容。在该函数中,我们通过互斥锁来保护共享变量count的访问。
```
void* thread_work(void* arg) {
// 上锁
pthread_mutex_lock(&mutex);
// 访问共享变量count
count++;
// 解锁
pthread_mutex_unlock(&mutex);
// 打印线程执行完毕的消息
printf("Thread finished working\n");
// 退出子线程
pthread_exit(NULL);
}
```
接下来,在主函数中我们创建两个线程,并启动它们:
```
int main() {
// 创建线程的标识符
pthread_t thread1, thread2;
// 创建线程1
pthread_create(&thread1, NULL, thread_work, NULL);
// 创建线程2
pthread_create(&thread2, NULL, thread_work, NULL);
// 等待线程1和线程2的结束
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
// 打印最终的count值
printf("Final count value: %d\n", count);
return 0;
}
```
在主函数中,我们通过pthread_create函数来创建两个子线程,分别执行thread_work函数的工作内容。接着,我们使用pthread_join来等待两个子线程的结束,这样可以保证主线程会在子线程执行完毕后再终止。最后,我们打印出最终的count值。
以上就是一个简单的用C语言和pthread库实现互斥锁的例子。希望能对您有所帮助!
### 回答3:
当然可以!以下是一个使用C语言和pthread库编写的互斥锁的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_mutex_t mutex; // 定义一个互斥锁
void* thread_function(void* arg) {
pthread_mutex_lock(&mutex); // 对互斥锁进行加锁
// 临界区代码
printf("进入线程...\n");
for (int i = 0; i < 5; i++) {
printf("线程正在执行:%d\n", i);
}
printf("退出线程...\n");
pthread_mutex_unlock(&mutex); // 对互斥锁进行解锁
return NULL;
}
int main() {
pthread_t thread;
pthread_mutex_init(&mutex, NULL); // 初始化互斥锁
pthread_create(&thread, NULL, thread_function, NULL); // 创建线程
pthread_mutex_lock(&mutex); // 对互斥锁进行加锁
// 临界区代码
printf("进入主线程...\n");
for (int i = 0; i < 5; i++) {
printf("主线程正在执行:%d\n", i);
}
printf("退出主线程...\n");
pthread_mutex_unlock(&mutex); // 对互斥锁进行解锁
pthread_join(thread, NULL); // 等待子线程结束
pthread_mutex_destroy(&mutex); // 销毁互斥锁
return 0;
}
```
在上面的例子中,我们通过使用`pthread_mutex_t`类型的变量`mutex`来定义一个互斥锁。在`thread_function`函数和主函数中,我们分别通过调用`pthread_mutex_lock`和`pthread_mutex_unlock`函数来对互斥锁进行加锁和解锁。这样就可以确保在临界区代码中,同一时间只有一个线程能够执行。
阅读全文