且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

互斥锁和pthreadJoin之间的区别

更新时间:2023-11-13 22:15:10

它们实际上不是一回事。

互斥(互斥信号量)是一种将资源的使用限制为一次只能使用一个线程的方法(两个线程显然都能够运行)。当线程从pthread_mutex_lock调用成功返回时,可以保证它是唯一持有该锁的线程。在该点之后尝试锁定该互斥锁的任何线程通常都必须等待,直到拥有它的线程将其解锁。

换句话说,拥有锁的线程是唯一能够操作受该锁保护的资源的线程(当然,假设其他线程在没有首先获取锁的情况下不能访问资源-您必须遵守规则)。

Apthread_join则允许线程等待另一个线程退出。这通常在主线程中用来等待所有子线程退出(还有其他用途,这只是一个典型的用途)。从pthread_join成功返回表示另一个线程不再运行。

在您所显示的代码中,两个线程同时运行,counter增量和对printf的调用都受到mutex1的保护。main末尾的pthread_join调用将使主线程等到两个子线程退出后再继续。

顺便说一句,您应该检查pthread_mutex_lock的返回值,因为可能失败。在这种情况下,您不想继续修改受保护的资源,因为可能会发生损坏。pthread_join同上。

为了进行更全面的测试,***使用以下函数:

void *functionC() {
    int i;
    for (i = 1000; i > 0; i--) {
        pthread_mutex_lock (&mutex1);
        counter++;
        printf ("Counter value: %d
", counter);
        pthread_mutex_unlock (&mutex1);
    }
}

,因为它更有可能让线程并行运行。如果没有循环,一个线程很有可能在第二个线程启动之前就退出。