写一个初始化线程互斥锁的代码,for循环初始化4此
时间: 2024-03-11 14:50:55 浏览: 61
好的,以下是一个简单的 C++ 代码示例,用于初始化一个互斥锁并进行4次循环初始化:
```c++
#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
int main()
{
mutex mtx; // 初始化互斥锁
for (int i = 0; i < 4; i++) {
thread t([&](){
mtx.lock(); // 加锁
cout << "线程" << this_thread::get_id() << "获得了锁" << endl;
mtx.unlock(); // 解锁
});
t.join(); // 等待线程结束
}
return 0;
}
```
在上面的代码中,我们使用 `mutex` 类型来初始化互斥锁 `mtx`。然后,我们使用一个 `for` 循环创建4个线程,并在每个线程中通过 `mtx.lock()` 获得锁,输出线程ID和获得锁的信息,最后通过 `mtx.unlock()` 解锁。最后,我们通过 `t.join()` 等待线程结束。
这样,我们就成功地初始化了一个互斥锁,并使用它保护了线程的共享资源。
相关问题
C语言写一个初始化线程互斥锁的代码,for循环初始化4此
好的,以下是一个简单的 C 代码示例,用于初始化一个互斥锁并进行4次循环初始化:
```c
#include <stdio.h>
#include <pthread.h>
#define NUM_THREADS 4
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 初始化互斥锁
void *thread_func(void *thread_id) {
int tid = *(int*)thread_id;
pthread_mutex_lock(&mutex); // 加锁
printf("线程%d获得了锁\n", tid);
pthread_mutex_unlock(&mutex); // 解锁
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
int tids[NUM_THREADS];
int i;
for (i = 0; i < NUM_THREADS; i++) {
tids[i] = i;
pthread_create(&threads[i], NULL, thread_func, &tids[i]);
}
for (i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
pthread_mutex_destroy(&mutex); // 销毁互斥锁
return 0;
}
```
在上面的代码中,我们使用 `pthread_mutex_t` 类型来初始化互斥锁 `mutex`。然后,我们使用一个 `for` 循环创建4个线程,并在每个线程中通过 `pthread_mutex_lock()` 获得锁,输出线程ID和获得锁的信息,最后通过 `pthread_mutex_unlock()` 解锁。最后,我们通过 `pthread_join()` 等待线程结束,并通过 `pthread_mutex_destroy()` 销毁互斥锁。
这样,我们就成功地初始化了一个互斥锁,并使用它保护了线程的共享资源。
静态初始化互斥锁和读写锁
静态初始化互斥锁和读写锁可以使用宏定义来完成。在使用静态初始化的时候需要考虑到变量的可见性问题,因为静态变量只会在编译期间进行初始化,因此需要保证线程安全。
静态初始化互斥锁可以使用宏定义`PTHREAD_MUTEX_INITIALIZER`来完成,示例如下:
```
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
```
静态初始化读写锁可以使用宏定义`PTHREAD_RWLOCK_INITIALIZER`来完成,示例如下:
```
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
```
需要注意的是,静态初始化的互斥锁和读写锁不能销毁,否则会导致程序崩溃。如果需要销毁锁,需要使用动态初始化的方式,并在使用完毕后调用`pthread_mutex_destroy()`或`pthread_rwlock_destroy()`函数来销毁锁。
阅读全文