当前位置: 技术问答>linux和unix
求信号量控制例程 up有分
来源: 互联网 发布时间:2015-10-20
本文导语: 我建立了1个资源(fifo),然后有1组线A和一个线程B都要访问(读写)这个资源(fifo),我用的是信号量来控制访问,能不能让线程B获得最高权限,即如果当前信号量表示为“被占用”(被线程组A中的线程占用)而...
我建立了1个资源(fifo),然后有1组线A和一个线程B都要访问(读写)这个资源(fifo),我用的是信号量来控制访问,能不能让线程B获得最高权限,即如果当前信号量表示为“被占用”(被线程组A中的线程占用)而此时线程B也要访问该该资源(fifo)则线程B可以再这个信号量被释放后立即占有该信号量而不必去和线程组A里的其他线程竞争
求解决方案和例程
谢谢各位了!!
求解决方案和例程
谢谢各位了!!
|
我也认为只要是共享资源就存在竞争,但是不是使用消息队列就竞争少点,还要是要思考一下,反正我目前认为都竞争环境都一样,我觉得关键在如何控制竞争者,
有一个不成熟的想法,不知效率如何。。。,可 现在也没想好
有一个不成熟的想法,不知效率如何。。。,可 现在也没想好
|
我上面代码的主要思路是: 避免线程组A与线程B在一个信号量上排队,因为如果那样的话,
是哪个线程得到资源就是操作系统决定的,而不是按照我们的优先级。所以我让进程组
在一个信号量semA上,线程B用另一个semB,当某一线程持有semA后,该线程才有机会竞争
semB对由semB保护的共享资源进行访问.
还有,你的方案在给distribute线程 设置线程优先级( 我没设过 ,不过可以考绿一下 ,不过这样问题就变复杂了一些
是哪个线程得到资源就是操作系统决定的,而不是按照我们的优先级。所以我让进程组
在一个信号量semA上,线程B用另一个semB,当某一线程持有semA后,该线程才有机会竞争
semB对由semB保护的共享资源进行访问.
还有,你的方案在给distribute线程 设置线程优先级( 我没设过 ,不过可以考绿一下 ,不过这样问题就变复杂了一些
|
mark
|
再加一个信号量 nB
表示有多少个 B 在排队等待资源
当 A 获得资源后,操作资源之前 ,检查 nB ,如果发现有 B 在排队立刻放弃资源
缺点是
1 》A 得到资源后有可能没有操作立刻放弃了,在A 中要多一个判断
2 》A 有可能饥饿,老是得不到资源,
3 》效率不高 , 明显 , A 得到资源, 然后又放弃了
表示有多少个 B 在排队等待资源
当 A 获得资源后,操作资源之前 ,检查 nB ,如果发现有 B 在排队立刻放弃资源
缺点是
1 》A 得到资源后有可能没有操作立刻放弃了,在A 中要多一个判断
2 》A 有可能饥饿,老是得不到资源,
3 》效率不高 , 明显 , A 得到资源, 然后又放弃了
|
up
|
我没能力帮你解决这个问题,但是我有能力帮你UP
所以我就尽我的能力帮你一把!
UPUPUPUPUPUPUPUPUPUP
所以我就尽我的能力帮你一把!
UPUPUPUPUPUPUPUPUPUP
|
up
|
问题不会
但是up可以
但是up可以
|
up
|
linux里有线程吗?
不都是进程吗?
大家别笑,偶刚学linux
不都是进程吗?
大家别笑,偶刚学linux
|
不知道设置线程的优先级可否,我正在想系统是怎么调度的
------------------------------
转
另外一个可能常用的属性是线程的优先级,它存放在结构sched_param中。用函数
pthread_attr_getschedparam和函数pthread_attr_setschedparam进行存放,一般说来,我们总
是先取优先级,对取得的值修改后再存放回去。下面即是一段简单的例子。
#include
#include
pthread_attr_t attr;
pthread_t tid;
sched_param param;
int newprio=20;
pthread_attr_init(&attr);
pthread_attr_getschedparam(&attr, ¶m);
param.sched_priority=newprio;
pthread_attr_setschedparam(&attr, ¶m);
pthread_create(&tid, &attr, (void *)myfunction, myarg);
------------------------------
转
另外一个可能常用的属性是线程的优先级,它存放在结构sched_param中。用函数
pthread_attr_getschedparam和函数pthread_attr_setschedparam进行存放,一般说来,我们总
是先取优先级,对取得的值修改后再存放回去。下面即是一段简单的例子。
#include
#include
pthread_attr_t attr;
pthread_t tid;
sched_param param;
int newprio=20;
pthread_attr_init(&attr);
pthread_attr_getschedparam(&attr, ¶m);
param.sched_priority=newprio;
pthread_attr_setschedparam(&attr, ¶m);
pthread_create(&tid, &attr, (void *)myfunction, myarg);
|
linux中是优先级数值越低越优先
|
线程A和线程B为什么一定要用FIFO来实现呢?消息队列不也挺好的么?而且不用太担心竞争问题。另外,如果在一个进程中,为什么大家不操作同一块内存呢?在你说的这种情况下,很有可能线程A被饿死,因为线程B将成为一个瓶颈,即使不饿死,也存在等待时间过长的情况。建议修改一下结构,不使用FIFO。
|
在网络编程里面有线程的概念啊,呵呵
网络编程你是不是用socket?
网络编程你是不是用socket?
|
Study
|
专业顶贴 兼职接分
|
up