
线程
文章平均质量分 60
、、、、南山小雨、、、、
秋风吹湘水,落叶满南山.
展开
-
std::thread的接口使用
std::thread 类的 join() 函数用于等待一个 std::thread 对象所表示的线程结束运行。如果 std::thread 对象是可连接的,则调用 join() 函数会使当前线程(调用 join() 的线程)挂起(阻塞在这里),直到 std::thread 对象所表示的线程结束运行为止。一个 std::thread 对象是可连接的,当且仅当它所表示的线程正在运行且尚未被连接过(调用过 std::thread::join() 或 std::thread::detach() 函数)。原创 2022-12-29 11:14:58 · 716 阅读 · 0 评论 -
读写锁的使用
什么是互斥锁: 当一个资源被一个线程的互斥锁锁定的时候,互斥锁会保存这个线程的id,此后只有这线程能解锁这个互斥锁,在解锁之前,包括这个线程本身的所有进程都无法访问这个资源。这个资源可以是一个或多个变量。 什么是读写锁: 读写锁对同一把读写锁上下文,有两个操作 1.读锁操作,int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock); 2.写锁操作,int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock); 分为三种使原创 2022-02-14 11:26:56 · 1542 阅读 · 0 评论 -
死锁产生的各种情况
先了解下什么叫做死锁: 一个或多个变量被可执行程序的其中一个线程锁住了,其他线程都无法访问这个资源,被阻塞在对这个资源访问前,但是锁住这个资源的线程本身也被锁住了,它也被阻塞在对这个资源访问的前面。 那么为什么锁住资源的线程本身也被锁住了呢,这就是死锁产生的原因,比如这个线程锁住了资源,但是离开时忘记解锁,因此下次再来访问时也被阻塞住了。 下面是一些死锁的情况,以下是伪代码: 1,加锁之后忘记解锁 void funcA() { for (int i = 0; i < 10; i++)原创 2022-02-14 11:03:49 · 758 阅读 · 0 评论 -
互斥锁的使用,两个线程数数到100
什么是互斥锁: 当一个资源被一个线程的互斥锁锁定的时候,互斥锁会保存这个线程的id,此后只有这线程能解锁这个互斥锁,在解锁之前,包括这个线程本身的所有进程都无法访问这个资源。这个资源可以是一个或多个变量。 读写锁使用见:读写锁的使用 打印结果如下: 可以看出并没有数到100,这是为什么呢,因为两个线程没有同步,有时B线程因为睡眠,值还没来得及赋值给number,A线程又访问number。多核计算机两个线程如果跑在不同的核中,对number的访问是并行的,因此不能确保数到100。并且pthread_join(原创 2022-02-13 17:53:39 · 487 阅读 · 0 评论