- 论坛徽章:
- 0
|
回复 2# crazyhadoop
我后来是试了下。貌似确实可以啊。可能同步问题。导致输入的参数错误了。下面是测试代码。如果没有sleep(2);这句话,两次创建线程输入的参数i都等于2了。输出结果是
in handler
2 handler!
in handler
2 handler!
坑爹啊...- #include <stdio.h>
- #include <stdlib.h>
- #include <pthread.h>
- #include <unistd.h>
- void handler(void *arg)
- {
- int i;
- i=*((int *)arg);
- printf("in handler\n");
- if(i==1)
- {
- printf("1 handler!\n");
- }
- else if(i==2)
- {
- printf("2 handler!\n");
- }
- return ;
- }
- int main(void)
- {
- int i=1;
- pthread_t ntid1,ntid2;
- int retval=0;
- i=1;
- retval=pthread_create(&ntid1,NULL,handler,(void *)&i);
- if(retval<0)
- {
- perror("create pthread failed!");
- return retval;
- }
- sleep(2);//如果没有这句则两次输入的参数i都是2
- i=2;
- retval=pthread_create(&ntid1,NULL,(void *)handler,(void *)&i);
- if(retval<0)
- {
- perror("create pthread failed!");
- return retval;
- }
- while(1);
- return EXIT_SUCCESS;
- }
复制代码 |
|