linux线程同步

来源:互联网 发布:sybase数据库下载 编辑:程序博客网 时间:2024/06/06 13:06
/* Copyright (c) 2014 * All rights reserved * http://blog.csdn.net/ezhou_liukai */#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#include <semaphore.h>//using mutex lock to test thread synchronizepthread_mutex_t g_mutex;   void *mutex_lock_thread(void *agr){    pthread_mutex_lock(&g_mutex);    printf("\nthread_Id:%u start\n", (unsigned int) pthread_self());    printf("susspend thread 0.2 s\n");    sleep(0.2);    printf("thread_Id:%u end\n", (unsigned int) pthread_self());    pthread_mutex_unlock(&g_mutex);        return NULL;}void mutex_lock_test(){    printf("\n----------- mutex lock test ------------\n ");    int i = 0, n = 10;    pthread_t tid[10];        pthread_setconcurrency(11);    pthread_mutex_init(&g_mutex, NULL);    for(i = 0; i < n; i++)    {        pthread_create(&tid[i], NULL, &mutex_lock_thread, NULL);    }       for(i = 0; i < n; i++)    {        pthread_join(tid[i], NULL);    }        printf("\n------------ mutex lock test end -----------\n");}//end using mutex lock to test thread synchronize//using semaphore to test thread synchronizesem_t g_sem;void *semaphore_thread(void *agr){    sem_wait(&g_sem);    printf("\nthread_Id:%u start\n", (unsigned int) pthread_self());    printf("suspend thread 0.2s\n");    sleep(0.2);    printf("thread_Is:%u end\n", (unsigned int) pthread_self());    sem_post(&g_sem);    return NULL;}void semaphore_test(){    printf("\n----------- semaphore test -----------\n");    int i = 0, n = 10;    pthread_t tid[10];    sem_init(&g_sem, 0, 1);        pthread_setconcurrency(11);    for (i = 0; i < n; i++)    {        pthread_create(&tid[i], NULL, &semaphore_thread, NULL);    }    for (i = 0; i < n; i++)    {        pthread_join(tid[i], NULL);    }    printf("\n----------- semaphore test end -----------\n");}// end using semaphore to test thread synchronizeint main(int argc, char *argv[]){     mutex_lock_test();    semaphore_test();        return 1;}


0 0
原创粉丝点击