
系统编程
文章平均质量分 76
kyowill
这个作者很懒,什么都没留下…
展开
-
三个线程分别打印ABC,按顺序输出ABCABC...
#include #include #include #include #include #include using namespace std;pthread_mutex_t lockA;pthread_mutex_t lockB;pthread_mutex_t lockC;int i = 1;void* funA(void* args){ while(1原创 2015-09-29 01:09:48 · 3977 阅读 · 0 评论 -
信号量 互斥锁 条件变量的区别
信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”也就是说,信号量不转载 2015-09-13 10:16:30 · 431 阅读 · 0 评论 -
两个线程按顺序打印1~10
#include #include #include #include pthread_mutex_t lock;pthread_cond_t cond;int i = 1;void* salewinds1(void* args){ while(1) { pthread_mutex_lock(&lock); if(i == 10) { pthread原创 2015-09-17 23:46:25 · 1217 阅读 · 0 评论 -
理解Semaphore和Mutex
Mutex是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个。一般的用法是用于串行化对critical section代码的访问,保证这段代码不会被并行的运行。Semaphore是一件可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。对于N=1的情况,称为binary semaphore。一般的用法是,用于限制对于某一资源的同时访问。Binary转载 2015-09-13 10:12:11 · 509 阅读 · 0 评论 -
gdb寻找死锁
据说再高的高手在写多线程程序的时候都难确保不会产生死锁,死锁的调试也就成为一个比较常见的问题,假设有下面这样一个问题: 一个正在生产环境下运行的进程死锁了,或者你只是在跑一个程序,并没有在调试器里面打开它,然后发现没有响应,日志输出也停止了。由于你是一个有经验的程序员,会想到“我刚刚加上了新的锁策略,不一定稳定,这可能是死锁了“。但是你不想就这么杀掉进程,因为多线程的 bug 不容易重现转载 2015-10-29 21:01:38 · 1348 阅读 · 0 评论