锁的实现原理ide
互斥对象的主要操做有两个加锁(lock)和释放锁(unlock)。当一个线程对互斥对象进行lock操做并成功得到这个互斥对象的全部权,在此线程对此对象unlock前,其余线程对这个互斥对象的lock操做都会被阻塞函数
举例: metux m_metux1;线程
thread thread1;
thread thread2;
线程1线对 m_metux1 thread1.lock(m_metux1);获得互斥对象m_metux1 的全部权
而线程2阻塞在thread2.lock(m_metux1)这里对象
pthread_mutex_t m_mutex;同步
pthread_mutex_init(&m_mutex, NULL);
pthread_mutex_lock(&m_mutex);
pthread_mutex_unlock(&m_mutex);
pthread_mutex_destroy(&m_mutex);it
在线程实际运行过程当中,咱们常常须要多个线程保持同步。这时能够用互斥锁来完成任务;互斥锁的使用过程当中,主要有pthread_mutex_init,pthread_mutex_destory,pthread_mutex_lock,pthread_mutex_unlock这几个函数以完成锁的初始化,锁的销毁,上锁和释放锁操做。io
#include <pthread.h>
#include <stdio.h>class
pthread_mutex_t mutex ;
void print_msg(void arg){
int i=0;
pthread_mutex_lock(&mutex);
for(i=0;i<15;i++){
printf("output : %d\n",i);
usleep(100);
}
pthread_mutex_unlock(&mutex);
}
int main(int argc,char** argv){
pthread_t id1;
pthread_t id2;
pthread_mutex_init(&mutex,NULL);
pthread_create(&id1,NULL,print_msg,NULL);
pthread_create(&id2,NULL,print_msg,NULL);
pthread_join(id1,NULL);
pthread_join(id2,NULL);
pthread_mutex_destroy(&mutex);
return 1;thread