linux多线程1
如果了解java多线程编程的话,照葫芦画瓢,是很容易理解linux下面的线程模型的。#include <pthread.h>#include <stdio.h>#include <unistd.h>//define the first thread procedure.void * thread_1_pro(void * arg){//derive current thread's idpthread_ttid;tid=pthread_self();printf(" AAAAA thread id is %u\n",(unsigned int)tid);int * p_int_a=(int *) arg;while(1){sleep(5);printf("------------- a = %d\n",*p_int_a);(*p_int_a)++;printf("+++++++++++++ a = %d\n",*p_int_a); }}//define the second thread procedure.void * thread_2_pro(void * arg){//derive current thread's idpthread_ttid;tid=pthread_self();printf(" BBBB thread id is %u\n",(unsigned int)tid);int * p_int_a=(int *) arg;while(1){sleep(3);printf("------------- b = %d\n",*p_int_a);(*p_int_a)++;printf("+++++++++++++ b = %d\n",*p_int_a); }}int main(int argc, char ** argv){pthread_t tidA, tidB;//derive current thread's idpthread_ttid;tid=pthread_self();printf(" CCCCCCthread id is %u\n",(unsigned int)tid); int common=0;pthread_create(&tidA, NULL, &thread_1_pro, &common);pthread_create(&tidB, NULL, &thread_2_pro, &common);sleep(12);//为什么需要最下面两行呢,如果没有,12秒后,主进程结束,会自动回收线程tidA, tidB,//这两行就是主进程中的线程要等这两个分支线程结束后,才执行join后面的内容。//pthread_join(tidA, NULL);//pthread_join(tidB, NULL);return 0;} 输出结果:
CCCCCCthread id is 3078366912 BBBB thread id is 3069971312 AAAAA thread id is 3078364016------------- b = 0+++++++++++++ b = 1------------- a = 1+++++++++++++ a = 2------------- b = 2+++++++++++++ b = 3------------- b = 3+++++++++++++ b = 4------------- a = 4+++++++++++++ a = 5------------- b = 5+++++++++++++ b = 6 可以看到这个结果还是蛮有规律的,但是我们想说的,如果仔细调整一下sleep的位置,输出的结果可能就没有上面这么规律了,如下。
//define the first thread procedure.void * thread_1_pro(void * arg){//derive current thread's idpthread_ttid;tid=pthread_self();printf(" AAAAA thread id is %u\n",(unsigned int)tid);int * p_int_a=(int *) arg;while(1){printf("------------- a = %d\n",*p_int_a);(*p_int_a)++;sleep(7);printf("+++++++++++++ a = %d\n",*p_int_a); }}//define the second thread procedure.void * thread_2_pro(void * arg){//derive current thread's idpthread_ttid;tid=pthread_self();printf(" BBBB thread id is %u\n",(unsigned int)tid);int * p_int_a=(int *) arg;while(1){printf("------------- b = %d\n",*p_int_a);(*p_int_a)++;sleep(3);printf("+++++++++++++ b = %d\n",*p_int_a); }} 输出的结果如下:
CCCCCCthread id is 3077633728 AAAAA thread id is 3077630832------------- a = 0 BBBB thread id is 3069238128------------- b = 1+++++++++++++ b = 2------------- b = 2+++++++++++++ b = 3------------- b = 3+++++++++++++ a = 4------------- a = 4+++++++++++++ b = 5------------- b = 5+++++++++++++ b = 6------------- b = 6+++++++++++++ a = 7------------- a = 7+++++++++++++ b = 8------------- b = 8+++++++++++++ b = 9------------- b = 9 和上面相比,显的比较乱,是因为没有“同步”的原因。
页:
[1]