jjzjj

semaphore

全部标签

java - 编写一个有 2 个线程的程序,交替打印

我最近在面试中被问到这个问题。Writeaprogramwithtwothreads(AandB),whereAprints1,Bprints2andsoonuntil50isreached.我们该怎么做? 最佳答案 赋值的本质是演示一个线程如何向另一个线程发送信号。最常见的方式是使用阻塞队列,但这里一个信号不携带任何信息,所以一个信号量就足够了。创建用2个信号量参数化的线程类:输入和输出:classThreadPrinterimplementsRunnable{intcounter;Semaphoreins,outs;Thread

Java 并发实践 : race condition in BoundedExecutor?

在《Java并发实践》一书中,BoundedExecutor的实现有些奇怪。当有足够多的线程在执行器中排队或运行时,它应该通过阻塞提交线程来限制向执行器提交任务。这是实现(在catch子句中添加缺少的重新抛出之后):publicclassBoundedExecutor{privatefinalExecutorexec;privatefinalSemaphoresemaphore;publicBoundedExecutor(Executorexec,intbound){this.exec=exec;this.semaphore=newSemaphore(bound);}publicvoi

java - 如何编写测试并发不变量的单元测试

关于这个问题还有其他问题,但我正在尝试弄清楚如何进行这样的单元测试:publicclassSemaphoreextendsLock{privateAtomicIntegersemaphore=newAtomicInteger(0);publicsynchronizedbooleanavailable(){returnsemaphore.intValue()==0;}publicsynchronizedvoidacquire(){semaphore.incrementAndGet();}publicsynchronizedvoidrelease(){semaphore.decrement

Java - 信号量中的优先级

我有多个线程访问外部资源——浏览器。但是一次只有一个线程可以访问它。所以,我使用信号量来同步它们。但是,一个从GUI获取输入然后访问浏览器获取结果的线程应该优先于其他线程,我不确定如何使用信号量来实现它。我在想,每个线程在获取到信号量后,都会检查队列中是否有优先级线程在等待,如果有,就释放它,重新等待。只有优先级线程获取后不释放。这是一个很好的解决方案还是我可以使用JavaAPI中的其他任何内容? 最佳答案 Java中没有同步原语可以让您以您想要的方式将一个线程优先于其他线程。但是您可以使用另一种方法来解决您的问题。不是同步线程,而

java - Semaphore.acquire() 会因虚假唤醒而抛出 InterruptedException 吗?

一个看似简单的问题:我有一个java.util.concurrent.Semaphore,我想使用acquire()获得许可证.acquire()方法被指定为在线程被中断时抛出InterruptedException:Ifthecurrentthread:hasitsinterruptedstatussetonentrytothismethod;orisinterruptedwhilewaitingforapermit,thenInterruptedExceptionisthrownandthecurrentthread'sinterruptedstatusiscleared.但是,可

java - 如果 semaphore.acquire() 得到 InterruptedException,需要 semaphore.relase()?

在Javajava.util.concurrent.Semaphore文档中,我不太清楚如果semaphore.acquire()阻塞线程并随后被InterruptedException中断会发生什么。信号量值是否已经减小,是否需要释放信号量?目前我正在使用这样的代码:try{//usesemaphoretolimitnumberofparallelthreadssemaphore.acquire();doMyWork();}finally{semaphore.release();}或者在acquire()期间发生InterruptedException时我是否应该不调用release

c++ - boost named_semaphore 示例?

我没能找到一个很好的例子来展示如何使用boost::interprocess::named_semaphore(甚至在Boost网站上也没有)。我可以看到一些关于interprocess_semaphore的东西,但它们似乎完全不同,我不知道为一个显示的内容是否也适用于另一个。任何人都可以给我一些指向此类示例/tutorials/documentation的链接吗?谢谢。 最佳答案 interprocess_semaphore和named_semaphore之间的主要区别在于interprocess_semaphore是通过使用共享

c++ - 互斥量和信号量之间的区别 - 进程内和进程间

阅读关于两者(互斥量和信号量)之间差异的各种帖子,我得出以下结论,如果我错了请纠正我。这主要与Windows有关。我知道关键部分是代码中需要保护的部分(即)不能同时被多个线程访问。现在为了保护那些关键部分,使用了Mutexes。这些互斥量可以是算法或数据结构。现在互斥通常有两种形式(进程内和进程间)。对于没有调用内核进行锁定的内部进程,我们可以使用BoostThreadsynchronizationprimitives例如lock_guard,unique_lock,shared_lock(单作者/多读者)和进程间我们可以使用BoostInterprocesssemaphore.现在这

c++ - 在 Qt 的子线程中调用函数?

我有一个在不同时间调用子线程函数的主线程,但我不确定这是否是在Qt中执行此操作的正确方法。下面的代码有什么问题并寻找更好的替代方法当主线程释放锁时,主线程会无限运行,子进程会做一些工作。#include#include#includeQSemaphoresem(0);classBackground:publicQThread{protected:voidrun(){for(;;){sem.acquire(1);qDebug("Childfunctionran");}}};intmain(intargc,char*argv[]){QCoreApplicationa(argc,argv);

c++ - 带有信号量的线程安全单例问题

我写了一个简单的单例应用程序。下面是我的示例主类//ThreadsafeSingletonUsingSemaphore.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include#include#include"MySingleton.h"usingnamespacestd;inti=0;#defineTHREADCOUNT100DWORDWINAPIThreadProc(LPVOIDlParam);HANDLEg_semaphore=NULL;int_tmain(intargc,_TCHA