草庐IT

Semaphore

全部标签

c++ - Mac OS X 中的 sem_getvalue() 功能障碍 - C++

我正在尝试通过信号量在MacOSX中为一堆线程实现共享内存的同步使用。(我只是忽略了一个事实,即Mac用户在初始化和销毁​​信号量时遇到了很多问题......,可以通过sem_open()和sem_unlink()修复):D但显然要获取信号量的当前值,除了sem_getvalue()之外别无他物,它尚未在macosx中实现。对于没有运行linux操作系统并且应该在几个小时内上传作业的人有什么建议吗??!:)谢谢 最佳答案 我想您是在问,“我该如何解决OSX上缺少sem_getvalue()的问题?”我可以想到三种方法:首先(在我看来

c++ - Win32 事件与信号量

基本上我需要替换ConditionVariable和SleepConditionVariableCS,因为它只支持Vista和UP。(对于C++)有人建议用Semaphore,我也找到了CreateEvent。基本上,我需要让线程等待WaitForSingleObject,直到一个或多个其他线程告诉我有事情要做。我应该在哪种情况下使用信号量与Win事件?谢谢 最佳答案 在你的情况下,我会自己使用一个事件。当您希望线程开始运行时向事件发出信号。工作完成:)编辑:信号量和事件之间的区别归结为内部计数。如果有多个ReleaseSemaph

c++ - 我可以只用事件、互斥量和信号量实现公平的 "wait on multiple events"吗?

在只有事件[1]、互斥锁和信号量[2]的平台上,我可以创建一个公平的“等待多个事件”实现,当任何事件[3]发出信号/设置时返回。我假设现有的原语是公平的。[1]事件是具有4个操作的“标志”:Set()、Clear()、Wait()和WaitAndClear()。如果你在一个未设置的事件上等待(),你会阻塞直到有人设置()它。WaitAndClear()听起来像,但是原子的。所有服务员都被唤醒。[2]我认为系统不支持负值的信号量。[3]我说的是“事件”,但它可能是使用任何这些原语的新对象类型。 最佳答案 对于window,WaitFo

c++ - std::condition_variables 可以用作计数信号量吗?

这是CanC++11condition_variablesbeusedtosynchronizeprocesses?的后续行动.std::condition_variable对象可以用作计数信号量吗?我认为不是因为对象似乎绑定(bind)到std::mutex,这意味着它只能用作二进制信号量。我在网上看过,包括here,here,和here,但找不到将这些对象用作计数信号量的引用或示例。 最佳答案 是的。structcounting_sem{counting_sem(std::ptrdiff_tinit=0):count(init)

ios - 如何在后台为 Firebase 实时数据库设置值?

我在后台调用setValue()是这样的:funcapplication(_application:UIApplication,didReceiveRemoteNotificationuserInfo:[AnyHashable:Any],fetchCompletionHandlercompletionHandler:@escaping(UIBackgroundFetchResult)->Void){letsemaphore:DispatchSemaphore=DispatchSemaphore(value:0)letref=FIRDatabase.database().referenc

objective-c - iOS 应用程序中 _class_initialize 中的 semaphore_wait_signal_trap 死锁

我的一个实体托管对象需要设置一个仅运行时的树状结构,其中节点是NSObject的子类(它们不是托管对象)。我在两个地方设置了那个结构(并因此分配了一堆节点):当创建一个新的此类托管对象时:一切正常。当读回现有的托管对象时,在其awakeFromFetch方法中。这就是我遇到问题的地方:对Node*newNode=[Nodealloc];的调用永远不会返回。我可以中断使用调试器,并且代码卡在semaphore_wait_signal_trap中。这是完整的调用堆栈:#00x937ac0e2insemaphore_wait_signal_trap()#10x937b1be6inpthrea

ios - 大文件的 RNCryptor 内存问题

我正在使用最新的RNCryptor加密文件数据,然后将其保存到磁盘。当我尝试加密大文件(超过150MB)时,我收到内存警告并且内存增加得非常快。我尝试了以下解决方案,但没有一个对我有用:Memoryissueswhenencrypting/decryptingalargefilewithRNCryptoroniOSDispatchqueuesandasynchronousRNCryptor这是我的方法:{-(void)encryptFileDataWithFilePath:(NSString*)filePath{dispatch_semaphore_tsemaphore=dispatc

ios - 同步运行时如何使异步方法超时

这基本上就是我正在做的同步运行异步方法:这在调用一次时基本上有效,但在调用多次时,它最终会停留在while循环中并且永远不会收到信号。关于如何将计时器设置为在某个时间后最终超时的任何想法?__blockSomeClass*result=nil;dispatch_semaphore_tsemaphore=dispatch_semaphore_create(0);dispatch_queue_tqueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,0UL);dispatch_async(queue,^{[[SomeManag

ios - dispatch_group_t 或 dispatch_semaphore_t 等待多个异步请求完成

我需要等待几个请求完成才能继续下一个任务。dispatch_group_t&dispatch_semaphore_t在这里很像。所以我想知道哪个更好,或者这里没有太大区别。dispatch_group_tserviceGroup=dispatch_group_create();dispatch_group_enter(serviceGroup);//incompletionblockdispatch_group_leave(serviceGroup);//waitforallrequeststocompletedispatch_group_notify(serviceGroup,dis

iOS 10/9 推送通知

我需要更新我们的应用程序以支持iOS9和iOS10,所以我的问题是使用UNUserNotificationCenter进行PushNotifications。因此在iOS9中,我们有一个返回UIUserNotificationSettings结果的方法,例如-(BOOL)alertEnabled{UIUserNotificationSettings*theSettings=[[UIApplicationsharedApplication]currentUserNotificationSettings];return[theSettingstypes]&UIUserNotificatio