Linux下关于互斥锁及同步的移植(一)
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-28
key 被用来惟一标识信号量;在 Windows 中,信号量是使用一个名称来标识的.
为了对信号量集数据结构进行初始化,可以使用 IPC_SET 命令来调用 semctl() 系统调用.将 arg.buf 所指向的 semid_ds 数据结构的某些成员的值写入信号量集数据结构中,同时更新这个结构的 sem_ctime member 的值.用户提供的这个 arg.buf 所指向的 semid_ds 结构如下所示:
int semctl(int semid, int semnum, int cmd = IPC_SET, ...) .在这段代码中:
SEMVMX 来决定的.
打开信号量
在 Windows 中,我们使用 OpenSemaphore() 来打开某个指定信号量.只有在两个进程之间共享信号量时,才需要使用信号量.在成功打开信号量之后,这个函数就会返回这个信号量的句柄,这样就可以在后续的调用中使用它了.
semget() 来打开某个信号量,不过此时 semflg 的值为 0:int semget(key,nsems,0) .在这段代码中:
WaitForSingleObject() (其他类型将会分别进行讨论).这个函数使用一个信号量对象的句柄作为参数,并会一直等待下去,直到其状态变为有信号状态或超时为止.
DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds );
在这段代码中:
sem_wait() 用来获取对信号量的访问.这个函数会挂起调用线程,直到这个信号量有一个非空计数为止.然后,它可以原子地减少这个信号量计数器的值:.
这个命令将立即删除信号量集及其数据结构,并唤醒所有正在等待的进程(如果发生错误,则返回,并将 errno 设置为 EIDRM ).调用进程的有效用户 ID 是超级用户,或者可以与该信号量集的创建者或所有者匹配的用户.参数 semnum 会被忽略. |
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 磁盘空间监控脚本--简约而不简单(shell编程实例)下一篇: Linux常用网络命令
关于Linux下关于互斥锁及同步的移植(一)的所有评论