草庐IT

Semaphore

全部标签

c# - 信号量 - 初始计数有什么用?

http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx要创建信号量,我需要提供初始计数和最大计数。MSDN指出初始计数是-Theinitialnumberofrequestsforthesemaphorethatcanbegrantedconcurrently.虽然它声明最大计数是Themaximumnumberofrequestsforthesemaphorethatcanbegrantedconcurrently.我可以理解为maximumcount是可以并发访问一个资源的最大线程数。但

c# - 信号量 - 初始计数有什么用?

http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx要创建信号量,我需要提供初始计数和最大计数。MSDN指出初始计数是-Theinitialnumberofrequestsforthesemaphorethatcanbegrantedconcurrently.虽然它声明最大计数是Themaximumnumberofrequestsforthesemaphorethatcanbegrantedconcurrently.我可以理解为maximumcount是可以并发访问一个资源的最大线程数。但

Javascript 信号量/测试和设置/锁定?

Javascript中是否存在原子测试和设置、信号量或锁之类的东西?我有javascript通过自定义协议(protocol)调用异步后台进程(后台进程实际上在一个单独的进程中运行,与浏览器无关)。我相信我遇到了竞争状况;后台进程在我的测试和我的设置之间返回,在javascript端搞砸了。我需要一个测试和设置操作来使它成为一个真正的信号量。这是尝试检测后台进程并将其排队的javascript代码:Call=function(){varisRunning=true,queue=[];return{//myPublicProperty:"something",call:function(

Javascript 信号量/测试和设置/锁定?

Javascript中是否存在原子测试和设置、信号量或锁之类的东西?我有javascript通过自定义协议(protocol)调用异步后台进程(后台进程实际上在一个单独的进程中运行,与浏览器无关)。我相信我遇到了竞争状况;后台进程在我的测试和我的设置之间返回,在javascript端搞砸了。我需要一个测试和设置操作来使它成为一个真正的信号量。这是尝试检测后台进程并将其排队的javascript代码:Call=function(){varisRunning=true,queue=[];return{//myPublicProperty:"something",call:function(

go - 如何等到缓冲 channel (信号量)为空?

我有一片整数,它们是并发操作的:ints:=[]int{1,2,3,4,5,6,7,8,9,10}我使用缓冲channel作为信号量,以便获得并发运行的go例程的上限:sem:=make(chanstruct{},2)for_,i:=rangeints{//acquiresemaphoresem上面的代码在达到最后一个或最后两个整数之前运行良好,因为程序在最后一个go例程完成之前结束。问题:如何等待缓冲channel耗尽? 最佳答案 您不能以这种方式使用信号量(在本例中为channel)。当您处理值和分派(dispatch)更多go

go - 如何等到缓冲 channel (信号量)为空?

我有一片整数,它们是并发操作的:ints:=[]int{1,2,3,4,5,6,7,8,9,10}我使用缓冲channel作为信号量,以便获得并发运行的go例程的上限:sem:=make(chanstruct{},2)for_,i:=rangeints{//acquiresemaphoresem上面的代码在达到最后一个或最后两个整数之前运行良好,因为程序在最后一个go例程完成之前结束。问题:如何等待缓冲channel耗尽? 最佳答案 您不能以这种方式使用信号量(在本例中为channel)。当您处理值和分派(dispatch)更多go

c - 进程间信号量有时无法按预期工作

我有以下C代码,其中以sm为前缀的变量由两个进程proc1和proc2共享。因此,信号量也是共享的。这段代码被反复调用。所以如果我说之前的值,那意味着之前迭代的值。我注意到在我的程序中proc1有时会通过sem_wait(sem_f2l)而proc2不会执行sem_post(sem_f2l)。我注意到这一点是因为sm_value_proc1和sm_value_proc2在我的程序中应该具有相同的值,它们确实如此,正如printfs和>>>。但是,带有的printf有时会显示不同的值。差异是由于proc1打印了sm_value_proc2的先前值,因为proc1神秘地有时不等待sm_f2

c - 进程间信号量有时无法按预期工作

我有以下C代码,其中以sm为前缀的变量由两个进程proc1和proc2共享。因此,信号量也是共享的。这段代码被反复调用。所以如果我说之前的值,那意味着之前迭代的值。我注意到在我的程序中proc1有时会通过sem_wait(sem_f2l)而proc2不会执行sem_post(sem_f2l)。我注意到这一点是因为sm_value_proc1和sm_value_proc2在我的程序中应该具有相同的值,它们确实如此,正如printfs和>>>。但是,带有的printf有时会显示不同的值。差异是由于proc1打印了sm_value_proc2的先前值,因为proc1神秘地有时不等待sm_f2

linux - 多进程同步 - 比信号量更好的选择?

我有一个在多个生产者和多个消费者之间共享的队列资源。都是独立的进程;没有一个进程“拥有”队列。根据实现的性质,必须控制对队列的访问,并且必须只允许一个进程在任何给定时刻推送或弹出。我认为使用名为semaphore的POSIX是正确的解决方案,但是一些细节让我感到困扰。(顺便说一下,这是一个仅限Linux的实现。)我应该在什么时候(如果有的话)执行sem_unlink?是否有任何理由实际删除队列?我担心某个进程在锁定队列信号量时死掉。有什么好的办法解决这个问题吗?我可以在尝试获取锁时进行定时等待,但如果超时到期,我现在就会遇到竞争条件。像这样的简单二进制锁是否有更好的解决方案?也许使用f

linux - 多进程同步 - 比信号量更好的选择?

我有一个在多个生产者和多个消费者之间共享的队列资源。都是独立的进程;没有一个进程“拥有”队列。根据实现的性质,必须控制对队列的访问,并且必须只允许一个进程在任何给定时刻推送或弹出。我认为使用名为semaphore的POSIX是正确的解决方案,但是一些细节让我感到困扰。(顺便说一下,这是一个仅限Linux的实现。)我应该在什么时候(如果有的话)执行sem_unlink?是否有任何理由实际删除队列?我担心某个进程在锁定队列信号量时死掉。有什么好的办法解决这个问题吗?我可以在尝试获取锁时进行定时等待,但如果超时到期,我现在就会遇到竞争条件。像这样的简单二进制锁是否有更好的解决方案?也许使用f