感觉现在的互斥锁不是真正意义上的锁住数据不让其他线程访问。
假设两个线程A和B,要锁的数据是: int D;
现在锁的意思很简单,只是“我现在用这个锁呢,别人想用就在那等我用完吧”,A线程和B线程都要有这样的表达:
pthread_mutex_lock(&mutex);
操作数据D...
pthread_mutex_unlock (&mutex);
真正锁的意义应该是“我现在正使用这些数据,别人想访问这些数据,等我不用了再给你”。
比如A线程这样锁住数据D后:
Lock{D}; // 注意是花括号不是圆括号
B线程里即使只有一条执行语句:
D = 9;
也实现了锁住D的功能。因为前面A已经把D锁住了,B执行到这条语句时不能继续,只能等A执行:
Unlock{D};
把D解锁后才能继续。
假设两个线程A和B,要锁的数据是: int D;
现在锁的意思很简单,只是“我现在用这个锁呢,别人想用就在那等我用完吧”,A线程和B线程都要有这样的表达:
pthread_mutex_lock(&mutex);
操作数据D...
pthread_mutex_unlock (&mutex);
真正锁的意义应该是“我现在正使用这些数据,别人想访问这些数据,等我不用了再给你”。
比如A线程这样锁住数据D后:
Lock{D}; // 注意是花括号不是圆括号
B线程里即使只有一条执行语句:
D = 9;
也实现了锁住D的功能。因为前面A已经把D锁住了,B执行到这条语句时不能继续,只能等A执行:
Unlock{D};
把D解锁后才能继续。
是不是这样的锁更好些呢? 抛砖引玉~~~