1、急!LINUX下,GCC编译,原程序包含<semaphore.h>头文件,为什么编译时说sem_wait,sem_post等未定义的引用
编译时加上参数:-lpthread
要看报错的阶段,是在编译还是链接阶段.
如果编译时函数没有找到,那是头文件的问题,如果链接时未定义引用,那是c库的问题.
如果你的头文件都正常包含了,那可能你的c库没有使能semaphore的支持.
2、linux/sem.h和sys/sem.h有什么区别
你好。
不只是sem.h,很多头文件都有/usr/include/linux和/usr/include/sys两个版本。
我的印象是:linux目录里面的头文件用于内核,
sys目录里面的头文件用于应用程序或者glibc标准库
如果我的回答没能帮助您,请继续追问。
3、清华版操作系统 管程章节学习中的疑问
signal也是管程操作的一部分,你当然可以理解为在上述那种情况下,AB是同内在管程之中的,容但我并不认为这有任何问题,因为管程的定义是:
“一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据”
注意管程中的诸操作本身就是就是为了多个进程并发执行而设计的,换句话说,这些操作与方法已经经过了良好的定义,使得即使多个进程同在管程之中操作对应的资源,也可以保证资源的访问是有序而不会发生任何冲突的(这正是管程的意义所在)。所以我认为尽管你可以这样理解,但是这种情况也是不会有任何问题的。
有问题欢迎继续讨论
4、linux下sem多大值会溢出sem
一、你是抄想问:sem队列的最大深度吗?
int semget(key_t key, int nsems, int semflg);
nsems must be greater than 0 and less than or equal to the maximum number of semaphores per semaphore set (SEMMSL).
#define SEMMSL 250 /* <= 8 000 max num of semaphores per id */
semget的最大队列深度为250
二、你想问的是sem id的最大值
/* Maximum value the semaphore can have. */
#define SEM_VALUE_MAX (2147483647)