linux---同步和互斥的区别

一、同步与互斥的区别

1. 同步

同步,又称直接制约关系,是指多个线程(或进程)为了合作完成任务,必须严格按照规定的 某种先后次序来运行。

例如,线程 T2 中的语句 y 要使用线程 T1 中的语句 x 的运行结果,所以只有当语句 x 执行完成之后语句 y 才可以执行。我们可以使用信号量进行同步:

semaphore S=0;   // 初始化信号量

T1() {
    ...
    x;           // 语句x
    V(S);        // 告诉线程T2,语句x已经完成
    ...
}

T2() {
    ...
    P(S);        // 检查语句x是否运行完成
    y;           // 检查无误,运行y语句
    ...
}

2. 互斥

互斥,又称间接制约关系,是指系统中的某些共享资源,一次只允许一个线程访问。当一个线程正在访问该临界资源时,其它线程必须等待。

例如,打印机就是一种临界资源,而访问打印机的代码片段称为临界区,故每次只允许一个线程进入临界区。—— 我们同样可以使用信号量解决互斥问题,只需把临界区置于 P(S) 和 V(S) 之间,即可实现两线程对临界资源的互斥访问。

semaphore S=1;   // 初始化信号量

T1() {
    ...
    P(S);
    线程T1的临界区;  // 访问临界资源
    V(S);
    ...
}

T2() {
    ...
    P(S);
    线程T2的临界区;  // 访问临界资源
    V(S);
    ...
}

猜你喜欢

转载自blog.csdn.net/qq_42024067/article/details/107522760
今日推荐