p**p 发帖数: 3386 | 1 想用pthread实现Producer/Consumer模型,但要避免polling的出现。因为这样反复检
查一个变量以判断是否有data被producer生成的话,系统占用率会很高,大量CPU时间
都浪费在轮询上了。
研究了一下pthread,里面的condtion variable好像可以用来同步线程。但发现只
有pthread_cond_wait和pthread_cond_signal两个主要函数,一个用来等某个条件
,另一个用来发出该条件。找了半天没看到如何取消该条件来导致线程重新进入等
待状态。也就是说,比如用户A等待某个condition,然后B激活该condition,A被唤
醒,完成工作,下面想让该condition被取消,这样A继续能够用pthread_cond_wai
t来睡眠直到condition重新被激活为止。
如果只用pthread_cond_wait和pthread_cond_signal两个函数的话,用户一旦被唤
醒就不可能再被催眠了,这样就没法达到设计的目的。
对pthread还没吃透,哪位DX给点建议或者link?多谢! |
T*******i 发帖数: 4992 | 2 loop
【在 p**p 的大作中提到】 : 想用pthread实现Producer/Consumer模型,但要避免polling的出现。因为这样反复检 : 查一个变量以判断是否有data被producer生成的话,系统占用率会很高,大量CPU时间 : 都浪费在轮询上了。 : 研究了一下pthread,里面的condtion variable好像可以用来同步线程。但发现只 : 有pthread_cond_wait和pthread_cond_signal两个主要函数,一个用来等某个条件 : ,另一个用来发出该条件。找了半天没看到如何取消该条件来导致线程重新进入等 : 待状态。也就是说,比如用户A等待某个condition,然后B激活该condition,A被唤 : 醒,完成工作,下面想让该condition被取消,这样A继续能够用pthread_cond_wai : t来睡眠直到condition重新被激活为止。 : 如果只用pthread_cond_wait和pthread_cond_signal两个函数的话,用户一旦被唤
|
p**p 发帖数: 3386 | 3 你是指用loop来轮询变量么?前面帖子里说了,希望尽量避免用这种方式
【在 T*******i 的大作中提到】 : loop
|
T*******i 发帖数: 4992 | 4 put condition_wait at the beginning of the loop
【在 p**p 的大作中提到】 : 你是指用loop来轮询变量么?前面帖子里说了,希望尽量避免用这种方式
|
X****r 发帖数: 3557 | 5 再wait就是了,signal只是一次性的。
【在 p**p 的大作中提到】 : 想用pthread实现Producer/Consumer模型,但要避免polling的出现。因为这样反复检 : 查一个变量以判断是否有data被producer生成的话,系统占用率会很高,大量CPU时间 : 都浪费在轮询上了。 : 研究了一下pthread,里面的condtion variable好像可以用来同步线程。但发现只 : 有pthread_cond_wait和pthread_cond_signal两个主要函数,一个用来等某个条件 : ,另一个用来发出该条件。找了半天没看到如何取消该条件来导致线程重新进入等 : 待状态。也就是说,比如用户A等待某个condition,然后B激活该condition,A被唤 : 醒,完成工作,下面想让该condition被取消,这样A继续能够用pthread_cond_wai : t来睡眠直到condition重新被激活为止。 : 如果只用pthread_cond_wait和pthread_cond_signal两个函数的话,用户一旦被唤
|
m*****e 发帖数: 4193 | 6 use semophore
【在 p**p 的大作中提到】 : 想用pthread实现Producer/Consumer模型,但要避免polling的出现。因为这样反复检 : 查一个变量以判断是否有data被producer生成的话,系统占用率会很高,大量CPU时间 : 都浪费在轮询上了。 : 研究了一下pthread,里面的condtion variable好像可以用来同步线程。但发现只 : 有pthread_cond_wait和pthread_cond_signal两个主要函数,一个用来等某个条件 : ,另一个用来发出该条件。找了半天没看到如何取消该条件来导致线程重新进入等 : 待状态。也就是说,比如用户A等待某个condition,然后B激活该condition,A被唤 : 醒,完成工作,下面想让该condition被取消,这样A继续能够用pthread_cond_wai : t来睡眠直到condition重新被激活为止。 : 如果只用pthread_cond_wait和pthread_cond_signal两个函数的话,用户一旦被唤
|
p**p 发帖数: 3386 | 7 原来如此,多谢指点!!!
【在 X****r 的大作中提到】 : 再wait就是了,signal只是一次性的。
|
T*******i 发帖数: 4992 | 8 郁闷呀
这个版每次答完问题,都是把我晾一边
【在 p**p 的大作中提到】 : 原来如此,多谢指点!!!
|
p****s 发帖数: 32405 | 9 我来代谢一次.
//hand hand, 昨天你回答的getopts我后来也看到了.
【在 T*******i 的大作中提到】 : 郁闷呀 : 这个版每次答完问题,都是把我晾一边
|
X****r 发帖数: 3557 | 10 人不知而不愠,不亦君子乎。
【在 T*******i 的大作中提到】 : 郁闷呀 : 这个版每次答完问题,都是把我晾一边
|