以下のメカニズムを使用して、2 つ以上のスレッドを同期することを考えています。私が思う唯一の欠点は、CPU使用率です。このメカニズムに関するご意見をお寄せください。この実装に問題はありますか? (gcc の _sync *関数は移植可能であると仮定します)
//logic is that if lock = 1 means a thread has acquired the lock.
// lock = 0 means lock is free.
// acquireLock:
// add 1 to lock if value is 1 this thread gets the lock
// if value is > 1 mean some one else have taken the lock, so decrement the count
int lock = 0 ; // global variable.
void acquireLock()
{
while(__sync_add_and_fetch (&lock,1) > 1)
{
__sync_add_and_fetch (&lock,-1);
}
}
void releaseLock()
{
__sync_add_and_fetch (&lock,-1);
}
したがって、共有データまたはグローバル データにアクセスするスレッドは、最初に acquireLock を呼び出し、グローバル データにアクセスしてから、Lock を解放します。