免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1576 | 回复: 5
打印 上一主题 下一主题

[SCO UNIX] 请教:一个关于共享内存读阻塞等待的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-14 09:30 |只看该作者 |倒序浏览
就是能实现在操作共享内存时,写优先,另外进程读的时候能够阻塞在那里等待新的数据,但写进程有数据要写时,读进程先停下来(哪怕当时有可读的数据在内存里)让写进程读完后再继续阻塞读
1。关于阻塞等待来读数据  应该怎样实现
2。写比读优先怎样实现
谢谢!!!
如果能加上代码和相应的说明最好,谢谢!!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-09-14 09:38 |只看该作者

请教:一个关于共享内存读阻塞等待的问题

可以使用信号灯,
给你个框架,自己慢慢看吧

  1. /* created */
  2.     data->;semid = semget((key_t)data->;semkey, data->;nsems,
  3.     sem_qperm|IPC_CREAT|IPC_EXCL);

  4. /* lock */
  5.     struct sembuf semlock = {0, -1, 0|SEM_UNDO};
  6.     semlock.sem_num = sem_no; // 信号灯集中的信号灯序号, 0based
  7.     if (!waitforlock) {
  8.         semlock.sem_flg |= IPC_NOWAIT;
  9.     }
  10.     if(semop(semid, &semlock, 1) == 0)
  11.         return TRUE;
  12.     else
  13.         return FALSE;

  14. /* unlock */
  15.     struct sembuf semunlock = {0, 1, 0|SEM_UNDO};
  16.     semunlock.sem_num = sem_no;
  17.     if (!waitforunlock) {
  18.         semunlock.sem_flg |= IPC_NOWAIT;
  19.     }
  20.     if(semop(semid, &semunlock, 1) == 0)
  21.         return TRUE;
  22.     else
  23.         return FALSE;

  24. /* islock? */
  25.     struct sembuf semchk = {0, 0, 0};
  26.     semchk.sem_num = sem_no; // 信号灯集中的信号灯序号, 0based
  27.     if (!waitforlock) {
  28.         semchk.sem_flg |= IPC_NOWAIT;
  29.     }
  30.     if(semop(semid, &semchk, 1) == 0) {
  31.         return TRUE;
  32.     }
  33.     else
  34.         return FALSE;
复制代码

论坛徽章:
0
3 [报告]
发表于 2004-09-14 10:10 |只看该作者

请教:一个关于共享内存读阻塞等待的问题

谢谢
先研究一下

论坛徽章:
0
4 [报告]
发表于 2004-09-14 10:13 |只看该作者

请教:一个关于共享内存读阻塞等待的问题

struct sembuf semlock = {0, -1, 0|SEM_UNDO};
中的操作标志一定是SEM_UNDO ,IPC_NOWAIT不行吧?  
还有加上0|是因为什么呢?

论坛徽章:
0
5 [报告]
发表于 2004-09-14 10:48 |只看该作者

请教:一个关于共享内存读阻塞等待的问题

其实可以不用0|吧
写优先怎么实现啊?

论坛徽章:
0
6 [报告]
发表于 2004-09-14 11:14 |只看该作者

请教:一个关于共享内存读阻塞等待的问题

做了一下测试,和我想要的那种阻塞没有实现啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP