线程绑定问题

请问:

线程绑定函数有用吗?有人告诉我说线程绑定没谱,所以他们都是用进城做的绑定。

我自己试了一下使用ThreadCtl绑定线程。

int dat=0x00;
int *data;
*data=dat;

statue=ThreadCtl(_NTO_TCTL_RUNMASK, data);


我的电脑是双核四线程,就是伪4核,不过QNX在SMP模式下能识别出4个CPU

来,我设定的是将主线程绑定在CPU 0上,但是程序只是在CPU2和CPU3上跳来跳去,

频率不大。我如果不输入绑定命令,则线程会在4个CPU上来回跳,请问这是为什么呢?

是因为我其实实际上是双核,所以线程在两个CPU上跳,而不去另外两个CPU上去吗?

那么它为什么不在CPU 0 和CPU 1上跳,而在CPU2和CPU3上跳呢?

再有就是附属线程的绑定是在生成的时候就设定好呢?还是说生成了线程再调用

ThreadCtl函数设定呢?

还要麻烦各位达人帮忙解答一下。

是你的用法有问题。你可以再仔细读一下文档的相关说明。比较“特殊”的地方是要把一个int值 cast 到一个 void * 传进去。

如果要绑定线程到"cpu0",应该是:

int mask = 0x00000001;
status = ThreadCtl(_NTO_TCTL_RUNMASK, (void *)mask);

附属线程的"runmask"是从生成它的线程那里“继承”下来的。如果你把主线程如上绑定到cpu0,那么主线程生成的所有线程都自动绑定为cpu0。除非你另外用 ThreadCtl()改变它们。

哦,果然像您说的那样,能绑住了,但是我又发现了一些小问题

当我把runmask设置为0x00000001时绑定为CPU1,

当我把runmask设置为0x00000002或者0x00000003时绑定为CPU2,

当我把runmask设置为0x00000004或者0x00000005时绑定为CPU3,

当我把runmask设置为0x00000006或者0x00000007时无法绑定,

当我把runmask设置为0x00000008时绑定为CPU4。

您看这是为什么啊?

这个东西叫"runmask",其实就是个bitmask.

也就是说用 0x00000003时,你的意思是绑定“CPU1和CPU2”。也就是说线程可以在CPU1或者CPU2上运行,但决不会去CPU3或CPU4。

哦,它是按照1所在的位置来判断绑到哪个CPU的是吗?原来是这样啊。。

看了您的解释,反过来又看了一遍说明,总算看懂了:

By default, a thread’s runmask is set to all ones

这句话的意思,呵呵,谢谢了

有个问题想要请教一下xtang,一个仿真程序(包括主要包括计算,文件I/O),

在QNX操作系统下,计算机是多核的,那么我是采用多线程好还是多进程好呢?

一般来讲,多线程、提高并行计算是提高性能的所在。折分成进程会带来额外的通讯以及同步的开销。

呵呵,还想问一下

makefile如果报了

unrecognised debug output level ‘’

这大概是哪方面出了问题啊?

编译行里有错吧,通常是单双引号没用对的结果。网上查一下有很多结果的。

qcc -o /Debug/a.o /Debug/machine_induction_wound.cpp -w1 -I/Debug/boost_1_35_0/boost_1_35_0 -c -g

就这句话,也没有单引号或者双引号啊?

网上的都是全英文问题和解释,看不懂啊。。。

嘿,共享这样一个有价值的信息表示感谢。