/* 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 synchronize
pthread_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 synchronize
sem_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 synchronize
int main(int argc, char *argv[])
{
mutex_lock_test();
semaphore_test();
return 1;
}