linux如何借助互斥锁确保线程1先运行完,线程2再运行?
/mutex.c/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <errno.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int lock_var;
time_t end_time;
void pthread1(void *arg);
void pthread2(void *arg);
int main(int argc, char *argv[])
{
pthread_t id1,id2;
pthread_t mon_th_id;
int i,ret;
void *mythread1(void)
{
int i;
for(i=0;i<100;i++)
{
printf("this is the 1st pthread,created by zieckey.\n");
sleep(1);
}
}
void *mythread2(void)
{
int i;
for(i=0;i<100;i++)
{
printf("this is the 2st pthread,created by zieckey.\n");
sleep(1);
}
}
end_time = time(NULL)+10;
/*互斥锁初始化*/
pthread_mutex_init(&mutex,NULL);
/*线程一*/
/*void thread1(void)
{
int i=0;
for(i=0;i<6;i++)
{
printf("This is a pthread1.\n");
if(i==2) pthread_exit(0);
sleep(1);
}
}*/
/*线程二*/
/*void thread2(void)
{
int i;
for(i=0;i<3;i++) printf("This is a pthread2.\n");
pthread_exit(0);
} */
/*创建线程一*/
ret=pthread_create(&id1,NULL,(void *) pthread1,NULL);
if ( ret!=0 ) perror("pthread cread1");
sleep(1);
/*{
printf ("Create pthread error!\n"); exit(1);
}*/
/*创建线程二*/
ret=pthread_create(&id2,NULL,(void *) pthread2,NULL);
if ( ret!=0 ) perror("pthread cread2");
/*{
printf ("Create pthread error!\n"); exit(1);
}*/
/*等待线程结束*/
pthread_join(id1,NULL);
pthread_join(id2,NULL);
exit (0);
}
void pthread1(void *arg)
{
int i;
while (time(NULL) < end_time )
{
/互斥锁上锁/
if ( pthread_mutex_lock(&mutex)!=0 ) perror("pthread_mutex_lock");
else printf("pthread1:pthread1 lock the variable\n");
for ( i=0;i<2;i++ )
{
sleep(1);
lock_var++;
}
/*pthread_mutex_lock(&mutex);
printf("张三正在查询余额……\n");
sleep(1);*/
/*互斥锁解锁*/
if ( pthread_mutex_unlock(&mutex) !=0 )
perror("pthread_mutex_unlock");
else printf("pthread1:pthread1 unclok the variable\n");
sleep(1);
/*pthread_mutex_unlock(&mutex);
pthread_exit(NULL);*/
}
}
void pthread2(void *arg)
{
int nolock=0;
int ret;
while ( time(NULL) < end_time )
{
ret=pthread_mutex_trylock(&mutex);
if(ret==EBUSY) printf("pthread2:the variable is locked by1.\n");
else
{
if(ret!=0)
{
perror("pthread_mutex_trylock");
exit(1);
}
else printf("2:2got lock is%d\n",lock_var);
if(pthread_mutex_unlock(&mutex)!=0)
perror("pthread_mutex_unlock");
else printf("2:2 unclok the variable\n");
}
sleep(3);
}
}
为什么不显示我创建的线程里面的话呢?求解答
还有一个要求是在进程中先创建线程1,睡眠1秒后创建线程2。不知是否正确
不要这么搞
这样做和单线程有任何区别吗,为什么不单线程执行?