怎么用C语言实现两个线程在Linux环境下打印1~100
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
int n = 1;
int N = 100;
pthread_mutex_t mutex;
pthread_mutex_init(&mutex);
void *func1()
{
while(n < N+1)
{
pthread_mutex_lock(&mutex);
printf("%d 1\n",n);
n++;
pthread_mutex_unlock(&mutex);
}
if(n == N+1)
pthread_exit(NULL);
}
void *func2()
{
while(n < N+1)
{
pthread_mutex_lock(&mutex);
printf("%d 2\n",n);
n++;
pthread_mutex_unlock(&mutex);
}
if(n == N+1)
pthread_exit(NULL);
}
int main(int argc, char** argv)
{
pthread_t pid1,pid2;
if((pthread_create(&pid1,NULL,func1,NULL)) != 0)
printf("pthread create error\n");
if((pthread_create(&pid2,NULL,func2,NULL)) != 0)
printf("pthread create error\n");
pthread_join(pid1,NULL);
pthread_join(pid2,NULL);
return 0;
}
本人用到的锁是没用的,进入循环后另一个线程就没法抢占了,结果都是一个线程打印的。并且会打印101个数。求教程序该怎么写?实现两个线程交替打印,每个线程打印个数固定/不固定。 c语言
[解决办法]
可能跟操作系统时间片分配有关吧,可能一下子就执行完了,还没来得及线程切换呢,加个sleep试试
[解决办法]
整个线程从头到尾几乎锁住,貌似再开线程没啥意思了吧。多线程场景应该是只要任务不重复即可,print耗时不一,先后也不咋要求,那么锁住n一下立即释放,类似:
pthread_mutex_lock(&mutex);
int val = n++;
pthread_mutex_unlock(&mutex);
if (val > N)
break;
//your print routine...
[解决办法]
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
int n = 1;
int N = 100;
pthread_mutex_t mutex;
void *func1()
{
while(n<=N)
{
printf("%d 1\n", n);
pthread_mutex_lock(&mutex);
n++;
pthread_mutex_unlock(&mutex);
}
if(n==N)
pthread_exit(NULL);
return NULL;
}
void *func2()
{
while(n<=N)
{
printf("%d 2\n", n);
pthread_mutex_lock(&mutex);
n++;
pthread_mutex_unlock(&mutex);
}
if(n==N)
pthread_exit(NULL);
return NULL;
}
int main(int argc, char** argv)
{
pthread_t pid1,pid2;
pthread_mutex_init(&mutex, NULL);
if((pthread_create(&pid1,NULL,func1,NULL)) != 0)
printf("pthread create error\n");
if((pthread_create(&pid2,NULL,func2,NULL)) != 0)
printf("pthread create error\n");
pthread_join(pid1,NULL);
pthread_join(pid2,NULL);
return 0;
}