Qt多线程编程: QMutex

《one day》 以色列超震撼千人合唱 三种语言齐唱祈愿和平 超清

 

 

Mutex mutex;

void *AllocLarge(pool_t *pool, size_t size)
{
    mutex.lock();

    //do something

    mutex.unlock();

    return;
}

void *AllocLarge(pool_t *pool, size_t size)
{
    QMutexLocker lock(&mutex);
    
    //这样可以避免下面的各个分支退出的时候,都要写上unlock...
}



实际情况是,CPU分点时间给线程A,A就使命跑,CPU在分点给B线程,B在使劲跑。如果分到B线程的时候,发现锁被占用了,就没办法了。跑不了了


锁是用来保护数据的。你应该为每一个队列设一把锁,任何线程要操作队列,都要先获得这个队列的锁,在使用完队列之后,再释放锁。


就算是读也一样需要加锁
你怎么能够保证,在一个线程读时,另一个线程没对资源修改了。
如果是同时读,都没问题
同时读写,就会出问题了。除非你能保证一个读时,另外一个不在写。操作系统保证不了,只能你自己保证了。
对的,有可能自读的时候正好被修改数值了,看来还是得加锁了.

你可能感兴趣的:(C/C++)