一直对这些概念学了又忘忘了又学,究其根本是因为始终没搞清楚这几个概念之间的关系,每次都是钻进细节里面,所以就很容易忘了。所以这里整理一下,以后回忆起来也方便。
首先锁是什么?操作系统中的锁是用于协调多个进程或线程对共享资源的访问(即多个线程同时只有一个线程可以进入临界区代码),以防止竞争条件和数据不一致的问题,以及实现进程之间的同步(本来两个不同的进程是各干各的,互不影响,这叫异步,如果我想要让进程A运行完某行代码之后进程B再运行,这叫作同步),比如读写进程之间就需要同步,写好了之后才能读。下面是实现进程互斥和同步的伪代码。
//进程互斥
mutex;
Thread1(){
mutex.lock();
Print();
mutex.unlock();
}
Thread2(){
mutex.lock();
Print();
mutex.unlock();
}
//进程同步
mutex.lock();//先锁,再运行子线程
Thread1(){
write();
mutex.unlock();
}
Thread1(){
mutex.lock();
read();//只有当写完之后才能读
}
那么锁有哪些呢?常见的有互斥锁(Mutex)、自旋锁(Spinlock)、读写锁(Read-Write Lock)、条件变量(Condition