多线程编程
时光漫走
这个作者很懒,什么都没留下…
展开
-
多线程的两种调试方法 Helgrind 与ThreadSanitizer
Helgrind可以检测下面三类错误: 1.POSIX pthreads API的错误使用 2.由加锁和解锁顺序引起的潜在的死锁 3.数据竞态--在没有锁或者同步机制下访问内存 调试命令 valgrind --tool=helgrind ./a.out ThreadSanitizer用来检测竞争状态 命令gcc a.c -fsanitize=thread -g -pthr...原创 2020-02-03 21:29:00 · 751 阅读 · 0 评论 -
多线程死锁例程的代码调试 如何避免进入死锁
一、调试代码如下 来源 阅码场https://www.yomocode.com/ void *child1(void *arg) { while(1){ pthread_mutex_lock(&mutex_1); sleep(3); pthread_mutex_lock(&...原创 2020-02-03 21:16:32 · 877 阅读 · 0 评论 -
Linux信号量
对posix 信号量的操作函数 Posix有名信号量:使用Posix IPC名字标识,可用于线程或进程间同步 Posix基于内存的信号量:存放在共享内存区中,可用于进程或线程间的同步 sem_init()、sem_destroy函数: #include <semaphore.h> // 初始化一个基于内存的信号量(sem指向的) int sem_init(sem_t *sem...原创 2020-02-03 12:53:47 · 315 阅读 · 0 评论 -
互斥锁和自旋锁
(1) Mutex(互斥量):pthread_mutex_*** (2) Spin lock(自旋锁):pthread_spin_*** 两种锁的加锁原理 互斥锁:线程会从sleep(加锁)——>running(解锁),过程中有上下文的切换,cpu的抢占,信号的发送等开销。 自旋锁:线程一直是running(加锁——>解锁),死循环检测锁的标志位,机制不复杂。 两种锁的区别 ...原创 2020-02-03 12:26:10 · 445 阅读 · 0 评论