/* ************************************************************************
* Filename: n_trylock.c
* Description:
* Version: 1.0
* Created: 2011骞?4鏈?2鏃?20鏃?9鍒?2绉?
* Revision: none
* Compiler: gcc
* Author: wenhao (wh), hnrain1004@gmail.com
* Company: sunplusapp
* ************************************************************************/
#include <stdio.h>
#include <pthread.h>
#include <errno.h>
pthread_mutex_t mutex;
void *thread_a(void *arg)
{
printf("thread a enter\n");
pthread_mutex_lock(&mutex);
printf("mutex a lock\n");
sleep(6);
pthread_mutex_unlock(&mutex);
printf("mutex a unlock\n");
}
void *thread_b(void *arg)
{
printf("thread b enter\n");
#if 1
pthread_mutex_trylock(&mutex);
#else
while(pthread_mutex_trylock(&mutex)==EBUSY)
{
printf("pthread b trylock\n");
sleep(1);
}
#endif
printf("mutex b lock\n");
pthread_mutex_unlock(&mutex);
printf("mutex b unlock\n");
}
int main(int argc,char **argv)
{
pthread_t tid_a,tid_b;
int err;
if(pthread_mutex_init(&mutex,NULL) != 0)
{
perror("pthread_mutex_init");
}
err = pthread_create(&tid_a,NULL,thread_a,NULL);
if(err != 0)
{
perror("pthread_create thread_a");
}
sleep(1);
err = pthread_create(&tid_b,NULL,thread_b,NULL);
if(err < 0)
{
perror("pthread_create thread_b");
}
sleep(10);
printf("the main close\n");
return 0;
}