linux线程同步的互斥锁(mutex)到底怎么用的》?谢谢

linux线程同步的互斥锁(mutex)到底怎么用的》?谢谢,第1张

互斥锁(mutex) 通过锁机制实现线程间的同步。

1、初始化锁。在Linux下,线程的互斥量数据类型是pthread_mutex_t。在使用前,要对它进行初始化。

2、静态分配:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER

3、动态分配:int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutex_attr_t *mutexattr)

4、加锁。对共享资源的访问,要对互斥量进行加锁,如果互斥量已经上了锁,调用线程会阻塞,直到互斥量被解锁

    int pthread_mutex_lock(pthread_mutex *mutex)

    int pthread_mutex_trylock(pthread_mutex_t *mutex)

    解锁。在完成了对共享资源的访问后,要对互斥量进行解锁。

    int pthread_mutex_unlock(pthread_mutex_t *mutex)

    销毁锁。锁在是使用完成后,需要进行销毁以释放资源。

    int pthread_mutex_destroy(pthread_mutex *mutex)

    #include <cstdio>  

    #include <cstdlib>  

    #include <unistd.h>  

    #include <pthread.h>  

    #include "iostream"  

    using namespace std  

    pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER  

    int tmp  

    void* thread(void *arg)  

    {  

        cout << "thread id is " << pthread_self() << endl  

        pthread_mutex_lock(&mutex)  

        tmp = 12  

        cout << "Now a is " << tmp << endl  

        pthread_mutex_unlock(&mutex)  

        return NULL  

    }  

    int main()  

    {  

        pthread_t id  

        cout << "main thread id is " << pthread_self() << endl  

        tmp = 3  

        cout << "In main func tmp = " << tmp << endl  

        if (!pthread_create(&id, NULL, thread, NULL))  

        {  

            cout << "Create thread success!" << endl  

        }  

        else  

        {  

            cout << "Create thread failed!" << endl  

        }  

        pthread_join(id, NULL)  

        pthread_mutex_destroy(&mutex)  

        return 0  

    }  

    //编译:g++ -o thread testthread.cpp -lpthread

互斥锁是信号量的特例。信号量的初始值表示有多少个任务可以同时访问共享资源,如果初始值为1,表示只有1个任务可以访问,信号量变成互斥锁(Mutex)。

1.同一时间只能有一个任务持有互斥锁,而且只有这个任务可以对互斥锁进行解锁。

2.使用中的互斥锁是不能被重新初始化的。

3.并且互斥锁不能用于中断上下文。

mutex结构体

mutex初始化

mutex加锁

mutex解锁

1、mutex初始化

a) 动态初始化

b) 静态初始化

2、mutex加锁

3、mutex解锁

drivers/input/evdev.c


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8624557.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存