#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
int counter;
void *thr_fun(void *arg)
{
for(int i = 0; i < 10; i++) {
printf("%lu %d\n", pthread_self(), ++counter);
}
return NULL;
}
int main()
{
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, thr_fun, NULL);
pthread_create(&tid2, NULL, thr_fun, NULL);
sleep(5);
return 0;
}
某一次的输出结果:
140031959435008 1
140031959435008 3
140031959435008 4
140031959435008 5
140031959435008 6
140031959435008 7
140031959435008 8
140031959435008 9
140031959435008 10
140031959435008 11
140031951042304 2
140031951042304 12
140031951042304 13
140031951042304 14
140031951042304 15
140031951042304 16
140031951042304 17
140031951042304 18
140031951042304 19
140031951042304 20
不是多线程嘛,为啥这输出结果先是第一个进程全部打印完,
然后打印第二个进程的结果;
counter = 2 时的++ 明显是第二个进程执行的,
那为啥后面的就是等第一个线程执行完再执行第二个线程;
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.