【发布时间】:2014-02-10 16:46:19
【问题描述】:
所以我遇到了竞争状况,我有一些解决问题的方法。很明显,我对线程很陌生,我的意见和研究是有限的。如果用户从服务器接收到某些消息,我会发生大量的异步调用。因此,由于我的对象的依赖性质,我的设计很差。
假设我有一个名为
的函数adduser:(NSString s){
does some asynchronize activity
}
Messageuser:(NSString s)
{
Does some more asychronize activity
}
如果用户收到一条消息,告诉它添加用户“Ryan”。他会创建一个线程并继续查找 Ryan 并存储他。但是,如果用户的应用程序处于挂起模式,并且在等待接收的消息缓冲中存在 addUser 请求和 MessageUser 请求,则会出现竞争条件,因为完成 Adduser 所需的时间比完成 MessageUser 所需的时间长。因此,如果 messageUser 被调用,并且(在我们的示例中)“Ryan”尚未完全添加,则会引发错误。
此问题的可能解决方案是什么。我查看了锁和信号量,我想做的是,当 MessageUser 收到一个调用时,检查以确保当前没有线程正在处理 addUser。如果没有,请继续。否则等待,而不是在完成后继续。
【问题讨论】:
标签: objective-c multithreading asynchronous objective-c-blocks