当前位置: 技术问答>linux和unix
关于线程的一点疑惑
来源: 互联网 发布时间:2017-03-09
本文导语: #include #include #include //int i=10; void * fn1(); void* fn2(); int main(){ pthread_t t1,t2; void * val; int i=10; pthread_create(&t1,NULL,fn1, (void *) i); pthread_create(&t2,NULL,fn2,(void *) i); pthread_join(t1,&val); pthread_join(t2,&val); printf("...
#include
#include
#include
//int i=10;
void * fn1();
void* fn2();
int main(){
pthread_t t1,t2;
void * val;
int i=10;
pthread_create(&t1,NULL,fn1, (void *) i);
pthread_create(&t2,NULL,fn2,(void *) i);
pthread_join(t1,&val);
pthread_join(t2,&val);
printf("%dn",i);
return 0;
}
void * fn1 (void* i){
i++;
}
void * fn2 (void * i)
{
i=i+2;
}
运行结果 10
为什么是10呢
fn1里面i++ fn2 里面i+2 不是应该13吗?
#include
#include
//int i=10;
void * fn1();
void* fn2();
int main(){
pthread_t t1,t2;
void * val;
int i=10;
pthread_create(&t1,NULL,fn1, (void *) i);
pthread_create(&t2,NULL,fn2,(void *) i);
pthread_join(t1,&val);
pthread_join(t2,&val);
printf("%dn",i);
return 0;
}
void * fn1 (void* i){
i++;
}
void * fn2 (void * i)
{
i=i+2;
}
运行结果 10
为什么是10呢
fn1里面i++ fn2 里面i+2 不是应该13吗?
|
void * fn1 (void* i){
i++;
}
void * fn2 (void * i)
{
i=i+2;
}
这两个错了
里面应该是*i,而不是i。
i++;
}
void * fn2 (void * i)
{
i=i+2;
}
这两个错了
里面应该是*i,而不是i。
void * fn1 (void* i){
*i++;
}
void * fn2 (void * i)
{
*i=*i+2;
}
|
#include
#include
#include
//int i=10;
void * fn1(); // 这里为什么没有参数?
void* fn2();
int main(){
pthread_t t1,t2;
void * val;
int i=10;
pthread_create(&t1,NULL,fn1, (void *) i); // 把一个int转成void *,不知道你怎么想的。请用(void *) &i
pthread_create(&t2,NULL,fn2,(void *) i); // 同上
pthread_join(t1,&val);
pthread_join(t2,&val);
printf("%dn",i);
return 0;
}
void * fn1 (void* i){
i++; // 你觉得这个i还是外面那个i吗。按上面方式传参,这里用(*i)++
}
void * fn2 (void * i)
{
i=i+2; // 同上
}
// PS:请先搞清楚指针怎么用,函数参数是怎么传递的。这个代码排版也很挫。
|
不加锁就是错的。
一看连C都没学好,指针完全不会用。
一看连C都没学好,指针完全不会用。
|
我已经讲得很清楚了,如果你还是不明白就看书去,如果不想看,建议别学程序了。