线程同步之信号量
来源:互联网 发布:windows历史各系统版本 编辑:程序博客网 时间:2024/05/16 09:45
信号量
头文件 semaphore.h
信号量类型:sem_t
加强版的互斥锁:
1、互斥锁的初始值只能是1,但是信号量可以人为的规定有几个互斥量,规定共享资源的数量。
2、互斥锁规定只能一个线程进行加锁和解锁的操作,但是信号量可以让这个线程加锁,另一个线程解锁。
3、 互斥量用于线程的互斥,信号线用于线程的同步。 这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。
主要操作函数:
○ 初始化信号量
sem_init(sem_t *sem,int pshared, unsigned int value);
pshared § 0 - 线程同步
§ 1 - 进程同步
value § 最多有几个线程操作共享数据
○ 销毁信号量
sem_destroy(sem_t*sem);
○ 加锁 --
sem_wait(sem_t*sem);
调用一次相当于对sem做了--操作,减少一个资源。如果sem值为0, 线程会阻塞
○ 尝试加锁
sem_trywait(sem_t*sem);
§ sem == 0, 加锁失败, 不阻塞, 直接返回
○ 限时尝试加锁
sem_timedwait(sem_t*sem, const struct timespec *abs_timeout);
abs_timeout 指定一个阻塞的时间上限,如果调用因不能立即执行递减而要阻塞。abs_timeout 参数指向一个指定绝对超时时刻的结构,这个结果由自 Epoch,1970-01-0100:00:00 +0000(UTC) 秒数和纳秒数构成。
○ 解锁 ++
sem_post(sem_t*sem);
对sem做了++操作,释放一个资源。
- 线程同步之信号量
- 线程同步之信号量
- 线程同步之信号量
- 线程同步之信号量同步
- 线程同步之信号量同步
- 线程间同步 之 信号量
- linux线程同步之信号量
- qt线程同步之信号量
- 线程同步机制之信号量
- 【Linux】线程同步之信号量同步
- 【Linux】线程同步之信号量同步
- 线程同步之semaphore信号量,代码实现
- 线程同步之信号量1~2
- JAVA 线程 同步 信号量
- JAVA 线程 同步 信号量
- 线程信号量同步
- 线程同步-信号量
- 线程同步----信号量(Semaphore)
- oracle10 数据库中 scott用户被锁与解锁
- 获取积分
- Html5_获取主机名,端口,路径 和 jquery简单使用
- 总结
- 配置(Linux、JDK、Tomcat、nginx)阿里云ecs服务器
- 线程同步之信号量
- 自定义View画太极并转动
- ARM体系结构与编程模型总结
- 点击button往ul中添加不同的内容
- python做数据分析实例
- 513. Find Bottom Left Tree Value
- sqoop基本介绍
- 【mfc】二维数组在picture控件显示
- HDOJ 2096 小明A+B(水题)