Linux c==信号量实现线程之间的PV操作(16)
2016-11-18 23:05
399 查看
1.信号量实现线程之间的PV操作,实现线程同步和互斥的数据模型?
(1).sem_init函数
函数作用:初始化信号量
函数原型:int sem_init(sem_t *sem,int pshared, unsigned int value)
参数:sem:信号量指针
Pshared:决定信号量能否在几个进程间共享,一般取0
Value:信号量的初始值
(2).信号的操作
(1).sem_init函数
函数作用:初始化信号量
函数原型:int sem_init(sem_t *sem,int pshared, unsigned int value)
参数:sem:信号量指针
Pshared:决定信号量能否在几个进程间共享,一般取0
Value:信号量的初始值
(2).信号的操作
intsem_wait(sem_t *sem); P操作 intsem_try_wait(sem_t *sem); intsempost(sem_t *sem); V操作 intsem_getvalue(sem_t *sem); intsem_destroy(sem_t *sem); 销毁信号
[objc] view plain copy print?在CODE上查看代码片派生到我的代码片 #include <stdio.h> #include <pthread.h> #include <semaphore.h> sem_t sem1; sem_t sem2; //PV操作:实现同步,先实现func1,后实现func2 voidvoid *myThread1(void) { int i; sem_wait(&sem1); for(i = 0; i < 5; i++) { printf("Hello\n"); sleep(1); } sem_post(&sem2); } voidvoid *myThread2(void) { int i; sem_wait(&sem2); for(i = 0; i < 5; i++) { printf("world!\n"); sleep(1); } sem_post(&sem1); } int main() { int ret = 0; pthread_t id1; pthread_t id2; sem_init(&sem1, 0, 1); sem_init(&sem2, 0, 0); ret = pthread_create(&id1, NULL, (voidvoid *)myThread1, NULL); if(ret) { printf("Create pthread error\n"); return 1; } ret = pthread_create(&id2, NULL, (voidvoid *)myThread2, NULL); if(ret) { printf("Create pthread error\n"); return 1; } pthread_join(id1, NULL); pthread_join(id2, NULL); sem_destroy(&sem1); sem_destroy(&sem2); return 0; }
相关文章推荐
- 信号量实现线程之间的PV操作
- Operating System-进程/线程内部通信-信号量、PV操作的实现和应用(解决哲学家进餐和生产者消费者问题)
- linux下实现两个线程之间的通信
- 线程同步3 ------ 信号量实现进程或者线程之间的同步
- linux信号量实现线程读写同步
- linux 线程间使用信号量实现消费者生产者
- Operating System-进程/线程内部通信-信号量、PV操作的实现和应用(解决哲学家进餐和生产者消费者问题)
- Linux平台用C++实现信号量,同步线程
- linux下实现两个线程之间的通信
- linux笔记之实现线程的信号量
- Linux利用信号量实现线程的同步与互斥
- 【Linux】线程总结:线程同步 -互斥锁,条件变量,信号量实现多生产者多消费者模型
- linux下实现两个线程之间的通信
- Linux平台用C++实现信号量,同步线程
- Linux平台用C++实现信号量,同步线程
- 多进程之间的互斥信号量实现(Linux和windows跨平台)
- 线程之间利用信号量协调对共享资源访问的c++代码实现
- 同步事件,信号量,互斥,临界区,线程,线程池C++实现(win32,linux)
- VC中利用多线程技术实现线程之间的通信
- 如何实现windows和linux之间的文件传输