FreeeLinux's blog

没有迷路的人

使用yeild实现spinlock

一、什么是spinlock spinlock又称自旋锁,是实现保护共享资源而提出一种锁机制。自旋锁与互斥锁比较类似,都是为了解决对某项资源的互斥使用 无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经...

2017-05-10 21:10:16

阅读数 437

评论数 0

C++多线程笔试编程题

一子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。代码如下:#include <stdio.h> #include <pthread.h> #include <unist...

2017-02-02 23:02:39

阅读数 2049

评论数 0

多线程编程的锁问题解析(锁竞争死锁活锁及Date Race等)

为了防止例1中的数据竞跑现象,我们可以使用锁来保证每个线程对counter++操作的独占访问(即保证该操作是原子的)。在例3的程序中,我们使用mutex锁将counter++操作放入临界区中,这样同一时刻只有获取锁的线程能访问该临界区,保证了counter++的原子性:即只有在线程1执行完coun...

2017-01-05 12:28:21

阅读数 2667

评论数 0

自旋锁与互斥锁的对比、手工实现自旋锁

本文之前,我只是对自旋锁有所了解,知道它是做什么的,但是没有去测试实现过,甚至以为自旋锁只有kernel用这个,今天才发现POSIX有提供自旋锁的接口。下面我会分析一下自旋锁,并代码实现自旋锁和互斥锁的性能对比,以及利用C++11实现自旋锁。 一:自旋锁(spin lock)     自旋锁是...

2016-12-16 17:31:50

阅读数 15021

评论数 2

最高效的进(线)程间通信机制--eventfd

我们常用的进程(线程)间通信机制有管道,信号,消息队列,信号量,共享内存,socket等等,其中主要作为进程(线程)间通知/等待的有管道pipe和socketpair。线程还有特别的condition。 今天来看一个liunx较新的系统调用,它是从LINUX 2.6.27版本开始增加的,主要用于进...

2016-12-08 00:03:45

阅读数 5256

评论数 0

多线程程序与fork()分析

我们在编写服务器程序时,要么使用多线程,要么使用多进程。如果我们在多线程程序中使用了fork(),这会带来很多不必要的麻烦,甚至带来死锁。 示例: #include #include #include #include #include using namespace std; ...

2016-12-01 22:30:24

阅读数 662

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭