c – 简单线程同步

前端之家收集整理的这篇文章主要介绍了c – 简单线程同步前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要一个简单的“一次一个”锁定一段代码.考虑可以从多个线程运行的函数func:
void func()
{
     // locking/mutex statement goes here
     operation1();
     operation2();
     // corresponding unlock goes here
     operation3();
}

我需要确保operation1和operation2始终“一起”运行.使用C#,我会在这两个调用周围使用一个简单的锁定块.什么是C / Win32 / MFC等价物?

想必是某种Mutex?

解决方法

关键部分将起作用(它们的重量轻于互斥体.)InitializeCriticalSection,EnterCriticalSection,LeaveCriticalSection和DeleteCriticalSection是要在 MSDN上查找的函数.
void func()
{
    // cs prevIoUsly initialized via InitializeCriticalSection
    EnterCriticalSection(&cs);
    operation1();
    operation2();
    LeaveCriticalSection(&cs);
    operation3();}
}

编辑:关键部分比互斥体更快,因为关键部分主要是用户模式基元 – 在无竞争获取的情况下(通常是常见情况),没有系统调用内核,并且获取大约需要数十个周期.内核交换机更昂贵(大约数百个周期).关键部分调用内核的唯一时间是为了阻塞,这涉及等待内核原语(互斥或事件).获取互斥锁总是涉及对内核的调用,因此速度要慢几个数量级.但是,关键部分只能用于在一个进程中同步资源.为了跨多个进程进行同步,需要一个互斥锁.

猜你在找的C&C++相关文章