java中的同步类似这样:
synchronized(x){
...
}
这个只是代码块,这里也只讨论代码块。
稍微思考,也只是采取了一种思想,即自解锁这种
那么先上代码
#include <mutex>
struct lugard_sync
{
explicit lugard_sync(std::mutex &_mutex)
: m_mutex(_mutex)
{ m_mutex.lock(); }
~lugard_sync() { m_mutex.unlock(); }
private:
std::mutex &m_mutex;
};
这里这个类接收一把锁,而这个类必定会被我们定义为局部变量,因为要自解嘛
故来代码
#define synchronized(x) for(int i = 0; i < 1; ++i) for(lugard_sync lock(x); i < 1;)
为什么要这么做,看用法要有大括号,for,if满足,这种做法只是为了在代码块我们可以使用break等。
这里实现比较简单,仅供参考