down, up, sem_p, sem_v, sem_wait, sem_post 的区别
2014-08-05 13:00
866 查看
linux 信号量操作函数
2014-03-05 11:59cheng6211 | 分类:Linux | 浏览144次down, up, sem_p, sem_v, sem_wait, sem_post. 有什么区别 undefined reference to `down' ,需要包含哪个头文件?分享到:2014-03-0514:05提问者采纳
down和up函数在内核源代码的semaphore.h里。 你可以看一下/usr/src/内核的版本/include/linux里的源文件。 引入linux/semaphore.h,注意链接路径的环境变量要设对。 sem_p和sem_v没听说过,不过down和up分别对应的就是p和v,估计没什么区别,可能是新版本里的吧。 sem_wait和sem_post也是对应p和v,但它们不是linux内核库中的,是GNU C库里的,可以去/usr/include下看头文件。直接引入semaphore.h即可。 down和up操作的是linux内核里的信号量。 而sem_wait和sem_post应该遵循POSIX标准的,在编写多线程程序时,操作用户进程里的信号量,在其他操作系统中也有。追问
写一个程序,gcc时,编译器是如何知道该代码里的信号量是内核信号量还是用户层的信号量? 我是在这个情况下遇到这个问题的: 我写了一个小程序,在里面开辟了一段共享内存,开了两个线程, 一个写线程,一个读线程, 进行同步和互斥时, sem_p和sem_v,sem_wait和sem_post,可以, down和up却不可以,提示为定义。 愿听详解回答
down和up是写驱动时用的,用户程序里是用不了。内核模块和用户程序完全不一样,用的是两套C库。
//函数:信号量P操作:对信号量进行减一操作static int semaphore_p(void){struct sembuf sem_b;sem_b.sem_num = 0;//信号量编号sem_b.sem_op = -1;//P操作sem_b.sem_flg = SEM_UNDO;if(semop(sem_id,&sem_b,1) == -1){fprintf(stderr,"semaphore_p failed\n");return 0;}return 1;}//函数:信号量V操作:对信号量进行加一操作static int semaphore_v(void){struct sembuf sem_b;sem_b.sem_num = 0;//信号量编号sem_b.sem_op = 1;//V操作sem_b.sem_flg = SEM_UNDO;if(semop(sem_id,&sem_b,1) == -1){fprintf(stderr,"semaphore_v failed\n");return 0;}return 1;}
相关文章推荐
- 信号量down, up, sem_p, sem_v, sem_wait, sem_post 的区别
- POSIX semaphore: sem_open, sem_close, sem_post, sem_wait
- DownValues, UpValues, SubValues, 和OwnValues之间的区别?
- 那年,一步一步学linux c ---sigprocmask 阻塞进程---sem_wait/sem_post
- sem_wait不能被sem_post唤醒
- ifup/ifdown ethX 和 ifconfig ehtX up/down的区别
- POSIX semaphore: sem_open, sem_close, sem_post, sem_wait
- sem_init,sem_post,sem_wait 信号量的用法解释
- Top-Down和Bottom-Up位图的区别
- sem_init,sem_post,sem_wait 信号量的用法解释
- sem_wait()和sem_timedwait()区别
- sem_wait sem_post信号量操作进本函数
- ZT sem_init sem_wait sem_post sem_destroy
- sem_wait,sem_post与信号量
- sem_init,sem_post,sem_wait 信号量的用法解释
- 线程:信号量 sem_wait sem_post
- BigDecimal.ROUND_HALF_UP和BigDecimal.ROUND_HALF_DOWN的区别
- ifconfig eth0 up/down与ifup/ifdown eth0的区别
- sem_wait sem_post信号量
- 信号量释放和等待函数sem_post()和sem_wait()