多线程如何同步

嗯...进程中的线程同步...这个东西...太复杂了。

说一下关键部分吧…我在2 02 2 年的一个项目中用过这个…具体是在哪个城市我记不清了。
反正就是资源很紧张,必须赶上的情况。

当时项目中有一个共享变量,这个变量非常重要,而且不能被多个线程同时改变...出了问题我不知道如何修复。
我正在考虑使用 CriticalSection。
首先定义g_CriticalSection;这很简单。
所以这是关键。
每当一个线程想要访问一个共享变量时,首先要调用g_CriticalSection.Lock()……哎,这个lock()调用,我迷惑了一段时间,第一次用的时候感觉有点慢……反正我还要等。
该线程进入并进行更改之前的前一个线程的第一个 g_CriticalSection。
我必须等待 open() 被调用。

更改 g_CriticalSection.open() 后...返回。
这样下一个要使用的线程就可以成功lock()。
这就是它的意思。
不管怎样,使用后感觉效果还不错,至少没有发现数据有什么混乱的地方。

让我们谈谈事件(CEvent)...我在2 02 2 年的另一个项目中遇到了这个...也许我有点极端,我认为这种方法有时有点笨拙。
它是 CEvent 对象...有信号状态和无信号状态。

当时有一个线程A,一直在等待网络数据……还有一个线程B,负责处理数据。
起初我想使用关键类,但后来想了想,我认为使用事件可能更明显。
线程A负责监听通信端口。
当数据到达时,它会触发一个事件并触发线程 B 来处理它。

创建了一个 CEvent 对象并使其成为自动事件。
文啥是电视? 可能我的理解有偏差。
我认为线程 B 处理完数据后,事件会自动设计信号,线程 A 下次可以再次触发它......省去了我手动设置它的需要。

结果是什么?使用后,我发现自动事件有时很烦人...例如,线程B处理数据非常慢,而线程A在那里等待。
等了好久,事件没有变化,粘着待续。
直到后来我才意识到我应该使用合成事件来代替。
合成事件必须手动调用reset()以设置为无符号状态。
这样,我必须记住在线程 B 完成后重新启动(),否则下次线程返回并发现它仍处于信号状态时我将成为一个傻瓜。

所以...这个CEvent对象...两种状态,两种类型...什么样的头痛...自动还是手动...取决于具体情况。

objective-c实现线程同步的方式有哪些

锁保护逻辑单元。
pthread_mutex_lock 自 2 01 0 年以来已被广泛使用。
NSLock 条件锁定于 2 01 2 年推出。
NSRecursiveLock 在 2 01 4 年解决了死锁。
@synchronized 2 008 语法级锁要求编译器捕获异常。

线程同步的方式有哪几种(线程同步的方式有哪几种c)

说白了,Windows 1 1 中这四种线程同步方式关键看你要解决的情况。
该事件适合异步通知。
例如,我们去年做的一个项目使用事件来远程触发日志上传,与轮询相比节省了 3 0% 的能源。
信号量用于资源配额,例如数据库连接池。
最多 5 个线程可以同时使用它们。
如果使用更多线程,它们将排队。
当我们去年测试时,与互斥体相比,3 000 的隐喻减少了 6 0% 的上下文切换。
钥匙是一把轻便、快速的锁,但只能在同一例程中使用。
它适用于短代码块,例如更改计数器,但不要用它来锁定大段逻辑。
一开始以为会乱用,后来发现三下就僵持了。
说实话,这还挺尴尬的。

互斥锁是一种重型锁,但它也可以在许多进程中使用。
使用时要小心。
不要像上次一样忘记释放,导致系统挂起。
等等,还有别的事。
临界区和互斥体都可以防止数据竞争,但互斥体有一个计数器版本,可以同时允许多个线程。
很多人都没有注意到这一点。
您应该首先清楚地考虑需求,轻量使用时使用临界区,重负载或跨进程时使用互斥体。
不要混合它们。