c++11中的锁

    C++11引入了一些新的同步原语来帮助开发人员构建多线程程序,其中包括各种锁。下面是C++11中各种锁的介绍:

    1. std::mutex

      std::mutex是最基本的锁类型,它提供了最基础的互斥锁功能。当一个线程持有这个锁时,其他线程必须等待这个锁被释放后才能继续执行。它遵循RAII(资源获取即初始化)原则,使得代码更加简洁和安全。

   2. std::recursive_mutex

     std::recursive_mutex是std::mutex的扩展,它允许同一线程多次获得锁。这种锁通常用于递归函数或者函数内部调用另一个锁保护的函数的情况下。

   3. std::timed_mutex

   std::timed_mutex是一个可超时的互斥锁,允许等待一段时间来获取锁。如果等待时间超过了指定的时间,则返回一个错误。这种锁通常用于避免死锁,或者在特定的情况下需要加锁一段时间。

    4. std::recursive_timed_mutex std::recursive_timed_mutex

     是std::timed_mutex的扩展,允许同一线程多次获得锁。这种锁通常用于递归函数或者函数内部调用另一个锁保护的函数的情况下。

     5. std::condition_variable

     std::condition_variable可以被用于等待直到某个条件变为真。它可以与std::mutex结合使用来防止线程忙等待,并且可以为等待线程提供内核级别的中断等待。

     6. std::mutex和std::condition_variable的组合

      std::mutex和std::condition_variable经常一起使用来实现更高级别的同步原语。通过std::condition_variable,线程可以等待某个条件成立,并在条件成立后被唤醒。当线程被唤醒后,它需要成功地获取std::mutex才能继续执行。 总之,C++11提供了多种类型的锁和同步原语,可以帮助开发人员构建更加高效、安全和可靠的多线程程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C11标准库提供了读写,可以用来实现多个线程对同一资源的并发读写操作。下面是使用读写的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <threads.h> int data = 0; rwlock_t lock; int reader(void* arg) { int id = *(int*)arg; while (1) { thrd_sleep((struct timespec){.tv_sec = 1}, NULL); // 模拟读操作 // 加读 rwlock_rdlock(&lock); printf("Reader %d read data: %d\n", id, data); // 释放读 rwlock_unlock(&lock); } return 0; } int writer(void* arg) { int id = *(int*)arg; while (1) { thrd_sleep((struct timespec){.tv_sec = 2}, NULL); // 模拟写操作 // 加写 rwlock_wrlock(&lock); data++; printf("Writer %d write data: %d\n", id, data); // 释放写 rwlock_unlock(&lock); } return 0; } int main(int argc, char const *argv[]) { // 初始化读写 rwlock_init(&lock); // 创建3个读线程 thrd_t readers[3]; int readerIds[3]; for (int i = 0; i < 3; i++) { readerIds[i] = i + 1; thrd_create(&readers[i], reader, &readerIds[i]); } // 创建2个写线程 thrd_t writers[2]; int writerIds[2]; for (int i = 0; i < 2; i++) { writerIds[i] = i + 1; thrd_create(&writers[i], writer, &writerIds[i]); } // 等待所有线程结束 for (int i = 0; i < 3; i++) { thrd_join(readers[i], NULL); } for (int i = 0; i < 2; i++) { thrd_join(writers[i], NULL); } // 销毁读写 rwlock_destroy(&lock); return 0; } ``` 这个示例程序有3个读线程和2个写线程,读线程每隔1秒钟读一次共享变量data的值,写线程每隔2秒钟写一次共享变量data的值。读线程和写线程之间会相互竞争读写,以实现对共享变量的并发访问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值