cod*_*ons 16 c++ multithreading
假设我有一个包含5个子线程的线程池.他们正在调用一个名为"functionA()"的函数.如何使函数成为线程安全的?
如果同时调用这5个线程,那么它们是否同时执行?或者他们等到当前在函数中工作的线程完成?
提前致谢..
Ric*_*ton 17
如果函数不修改非本地内存并且它不调用任何函数,则该函数已经是线程安全的.在这个(微不足道的)情况下,你不需要做任何事情.
你真的想要考虑保护数据,而不是功能.例如,假设该函数修改了非本地数据结构X.提供一个互斥锁来保护X并在每次访问之前将其锁定并在之后解锁.您可能有多个访问X的函数(例如insertX(),deleteX(),...).只要您保护数据,您就可以了.
使用互斥锁就可以做到这一点。
任何一个:
mutex_lock(&mutex);
functionA();
mutex_unlock(&mutex);
Run Code Online (Sandbox Code Playgroud)
或者在 functionA() 内部;
int functionA() {
mutex_lock(&mutex);
// code
mutex_unlock(&mutex);
}
Run Code Online (Sandbox Code Playgroud)
小心第二个解决方案,因为如果函数有其他退出路径(例如中间的返回)并且互斥体未解锁,则会出现称为死锁的情况。
| 归档时间: |
|
| 查看次数: |
17631 次 |
| 最近记录: |