对所说的。锁操作细粒度。我得认识是:锁住的代码尽量少。
-----------------------------
现在有一个结构体structA要跨线程读写。我为其上锁
写:
mutex.lock()
memcpy(&structA,source,length);
mutex.unlock();
写操作具体:
循环()
{
if(getstructA().a)
xxxxxx;
if(getstructA().b)
xxxxxx;
if(getstructA().c)
xxxxxx;
}
...
A:我的getstructA是引用出来的,还是处于临界区中的数据。因此我选择对第二个整个code上锁。
B:如果我getstructA和写操作一样是拷贝出来的,那在其上下加速即可。非常安全。看上去不错。
A方式看上去占了太多时间片,粒度似乎大。B需要copy、占时间也占空间。
就这个场景而言这,二者孰优孰劣呢?或者除此以外是否还有更合适的同步方式?谢谢各位