当前位置: 技术问答>linux和unix
棘手的多线程问题,请大家帮忙!
来源: 互联网 发布时间:2015-09-27
本文导语: 首先定义了线程入口函数 void *thread_func(void *ptr); 可不可以通过该线程函数同时起多个线程?每个线程根据参数ptr的不同,完成不同的功能? 这个线程函数在所起的多个线程中是有不同的拷贝还是共享的?在多个线...
首先定义了线程入口函数
void *thread_func(void *ptr);
可不可以通过该线程函数同时起多个线程?每个线程根据参数ptr的不同,完成不同的功能?
这个线程函数在所起的多个线程中是有不同的拷贝还是共享的?在多个线程同时运行时会不会引起冲突?
出于同样的考虑
如果该线程入口函数为某类中的静态成员函数,并且在此类构造时,通过该函数启动一个线程
那么当以该类生成多个对象时,这些线程函数是否会冲突?
请大家指点!
void *thread_func(void *ptr);
可不可以通过该线程函数同时起多个线程?每个线程根据参数ptr的不同,完成不同的功能?
这个线程函数在所起的多个线程中是有不同的拷贝还是共享的?在多个线程同时运行时会不会引起冲突?
出于同样的考虑
如果该线程入口函数为某类中的静态成员函数,并且在此类构造时,通过该函数启动一个线程
那么当以该类生成多个对象时,这些线程函数是否会冲突?
请大家指点!
|
//可不可以通过该线程函数同时起多个线程?
ok
//每个线程根据参数ptr的不同,完成不同的功能?
ok
这个线程函数在所起的多个线程中是有不同的拷贝还是共享的?
在运行时,线程函数与普通函数一样,没有区别。之所以称之为“线程函数”,主要是因为它是这个线程的入口而已。
//在多个线程同时运行时会不会引起冲突?
你说的冲突是指什么呢?多线程必然引入并发问题,但各个线程的执行彼此之间不会有什么干扰。
//如果该线程入口函数为某类中的静态成员函数,并且在此类构造时,通过该函数启动一个线程
那么当以该类生成多个对象时,这些线程函数是否会冲突?
首先,不建议在构造函数中启动线程。
另外,静态成员函数只能访问该类的静态成员(包括数据与函数),除非在线程函数内写操作(直接或间接)所有实例共享的静态数据成员,否则不会有什么不妥。不(直接/间接)访问类静态数据成员的静态成员函数实际上等同于全局函数。
ok
//每个线程根据参数ptr的不同,完成不同的功能?
ok
这个线程函数在所起的多个线程中是有不同的拷贝还是共享的?
在运行时,线程函数与普通函数一样,没有区别。之所以称之为“线程函数”,主要是因为它是这个线程的入口而已。
//在多个线程同时运行时会不会引起冲突?
你说的冲突是指什么呢?多线程必然引入并发问题,但各个线程的执行彼此之间不会有什么干扰。
//如果该线程入口函数为某类中的静态成员函数,并且在此类构造时,通过该函数启动一个线程
那么当以该类生成多个对象时,这些线程函数是否会冲突?
首先,不建议在构造函数中启动线程。
另外,静态成员函数只能访问该类的静态成员(包括数据与函数),除非在线程函数内写操作(直接或间接)所有实例共享的静态数据成员,否则不会有什么不妥。不(直接/间接)访问类静态数据成员的静态成员函数实际上等同于全局函数。
|
在windwos下启动线程的入口函数通常都是静态的,而且是回调函数,所以应该没有问题,函数存在一份拷贝没关系的,又不是变量,函数根据传入变量的不同,执行的结果就不一样
|
线程外的全局变量应该是共享,线程内的变量是互不干扰
|
完全可以,事实上一般都是这么做的。
传入不同的变量,线程内部获取该变量,执行不同的操作。
传入不同的变量,线程内部获取该变量,执行不同的操作。