多线程的互斥锁的运用

Posted 我有一壶酒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程的互斥锁的运用相关的知识,希望对你有一定的参考价值。

1、互斥锁的初始化pthread_mutex_init()函数语法

  

2、互斥锁上锁、判断上锁、解锁、销毁锁pthread_mutex_函数语法

  

 

代码分析:

/* thread_mutex.c */
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

#define THREAD_NUMBER    3    /* 线程数 */
#define REPEAT_NUMBER    3    /* 每个线程的任务数 */
#define DELAY_TIME_LEVELS    10.0    /* 任务之间的最大时间间隔 */
pthread_mutex_t mutex;

void* thrd_func(void* arg)
{
    int thrd_num = (int)arg;
    int delay_time = 0, count = 0;
    int res;

    /* 互斥锁上锁 */
    res = pthread_mutex_lock(&mutex);
    if(res)
    {
        printf("Thread %d lock failed\\n", thrd_num);
        pthread_exit(NULL);
    }
    printf("Thread %d is starting\\n", thrd_num);
    for(count = 0; count < REPEAT_NUMBER; count++)
    {
        delay_time = (int)(rand() * DELAY_TIME_LEVELS/(RAND_MAX)) + 1;
        sleep(delay_time);
        printf("\\tThread %d: job %d delay = %d\\n", thrd_num, count, delay_time);
    }
    printf("Thread %d finished \\n", thrd_num);
    pthread_exit(NULL);
}

int main(void)
{
    pthread_t thread[THREAD_NUMBER];
    int no = 0, res;
    void* thrd_ret;

    srand(time(NULL));
    /* 互斥锁初始化 */
    pthread_mutex_init(&mutex, NULL);
    for(no = 0; no < THREAD_NUMBER; no++)
    {
        res = pthread_create(&thread[no], NULL, thrd_func, (void*)no);
        if(res != 0)
        {
            printf("Create thread %d failed\\n", no);
            exit(res);
        }
    }
    printf("Create threads success\\n Waiting for threads to finish...\\n");
    for(no = 0; no < THREAD_NUMBER; no++)
    {
        res = pthread_join(thread[no],&thrd_ret);
        if(!res)
        {
            printf("Thread %d joined\\n", no);
        }
        else
        {
            printf("Thread %d joined failed\\n", no);
        }
        /* 互斥锁解锁 */
        pthread_mutex_unlock(&mutex);
    }
    pthread_mutex_destroy(&mutex);
    return 0;
}

 

  

 

   

以上是关于多线程的互斥锁的运用的主要内容,如果未能解决你的问题,请参考以下文章

Linux:详解多线程(线程安全互斥和死锁)

多线程安全----同步锁(互斥锁)

linux下信号量和互斥锁的区别

Java多线程和并发,synchronized

java中ReentrantReadWriteLock读写锁的使用

Java 中线程同步机制synchronized,互斥锁,死锁,释放锁的详解