互斥锁也叫互斥量,可以看作一种特殊的信号量。信号量可以>=0,大家可以排队使用信号量,互斥锁只有0、1,主要实现关键段保护,只能在某一时间给某一任务去调用这段资源,这段内容用之前上锁,用完时候解锁。
pthread_mutex_init()//申请互斥锁
pthread_mutex_destroy//销毁互斥锁
pthread_mutex_lock()//上锁
pthread_mutex_unlock()//解锁pthread_mutex_t mutex;定义互斥锁
int pthread_mutex_init(pthread_mutex_t *restrict mutex,
           const pthread_mutexattr_t *restrict attr);
void *func(void *arg)
{
    sleep(1);//不与主线程抢占第一次上锁
    while(0==flag)
    {
        pthread_mutex_lock(&mutex);
        ......处理......
        pthread_mutex_unlock(&mutex);
        sleep(1);//不与主线程抢资源获取的锁
    }
    pthread_exit(NULL);//线程退出
}
int main(void)
{
    pthread_mutex_init(&mutex,NULL);互斥锁初始化
    ret=pthread_create(&th,NULL,func,NULL);线程创建
    while(1)
    {
        pthread_mutex_lock(&mutex);
        scanf("%s",buf);
        pthread_mutex_unlock(&mutex);
        ......此时子线程解锁处理资源......
        sleep(1);//不与子线程抢处理
    }
    ret=pthread_join(th,NULL);//线程回收
    pthread_mutex_destroy(&mutex);//销毁互斥锁
}条件变量方式实现线程同步,首先这是线程特有的方法,支持阻塞与唤醒。
int pthread_cond_init(pthread_cond_t *restrict cond,
           const pthread_condattr_t *restrict attr);//初始化
int pthread_cond_destroy(pthread_cond_t *cond);//销毁
int pthread_cond_wait(pthread_cond_t *restrict cond,
           pthread_mutex_t *restrict mutex);//等待
int pthread_cond_signal(pthread_cond_t *cond);//发信号一对一
int pthread_cond_broadcast(pthread_cond_t *cond);//发信号一对多
以上就是常见的函数。
void *func(void *arg)
{
    while(0==flag)
    {
        pthread_mutex_lock(&mutex);
        pthread_cond_wait(&cond,&mutex);
        ......资源加工......
        pthread_mutex_unlock(&mutex);
    }
    pthread_exit(NULL);
}
int main()
{
    pthread_mutex_init(&mutex,NULL);
    pthread_cond_init(&cond,NULL);
    ret=pthread_create(&th,NULL,func,NULL);    
    while(1)
    {
        scanf("%s",buf);
        pthread_cond_signal(&cond);发信号让子线程干活
        ......主线程干活......
    }
    ret=pthread_join(th,NULL);//子线程回收
    pthread_mutex_destroy(&mutex);//销毁锁
    pthread_cond_destroy(&cond);//销毁条件变量
}条件变量同步必须在解锁与开锁之间进行。






![[控制理论]—差分变换法与双线性变换法的基本原理和代码实现](https://i-blog.csdnimg.cn/direct/a51c6c157cf644be910d4278fff80b37.png#pic_center)













