用C语言写一个将3个线程分配到3个CPU核并加锁的代码
时间: 2024-04-15 17:27:14 浏览: 96
这是一个使用C语言编写的将3个线程分配到3个CPU并加锁的示例代码:
```c
#include <stdio.h>
#include <pthread.h>
// 全局变量
int counter = 0;
pthread_mutex_t lock;
// 线程函数
void *thread_function(void *arg) {
int thread_id = *(int*)arg;
// 加锁
pthread_mutex_lock(&lock);
printf("Thread %d: Counter before increment: %d\n", thread_id, counter);
counter++;
printf("Thread %d: Counter after increment: %d\n", thread_id, counter);
// 解锁
pthread_mutex_unlock(&lock);
pthread_exit(NULL);
}
int main() {
pthread_t threads[3];
int thread_ids[3] = {1, 2, 3};
// 初始化互斥锁
pthread_mutex_init(&lock, NULL);
// 创建线程
for (int i = 0; i < 3; i++) {
pthread_create(&threads[i], NULL, thread_function, &thread_ids[i]);
}
// 等待线程完成
for (int i = 0; i < 3; i++) {
pthread_join(threads[i], NULL);
}
// 销毁互斥锁
pthread_mutex_destroy(&lock);
return 0;
}
```
这段代码使用了pthread库来创建和管理线程。在主函数中,创建了3个线程,并将线程函数设置为`thread_function`。`thread_function`函数中,先加锁,然后对全局变量`counter`进行递增操作,最后解锁。这样可以确保每个线程在对全局变量操作时不会发生冲突。
注意,这里使用了互斥锁(mutex)来实现对共享资源的保护。互斥锁是一种同步原语,用来确保在任意时刻只有一个线程可以访问共享资源。在代码中,通过`pthread_mutex_lock`和`pthread_mutex_unlock`函数来实现加锁和解锁操作。
请确保在编译和运行代码之前,已经安装了pthread库,并使用适当的编译选项链接该库。
阅读全文