其中n
是开头读取的值。
首先,在创建线程和fork()时,应该怎么做?只需return NULL
或输出一些东西?
在阅读n
之后,我想过做这样的事情,测量线程:
pthread_t threads[n];
begin = clock();
for (i = 0; i < n; i++) {
//cout << " main() created thread number: " << i << endl;
ret = pthread_create(&threads[i], NULL, Threads, (void *)i);
}
end = clock();
time = (double)(end - begin) / CLOCKS_PER_SEC;
这是准确的吗?计算它的好方法?对于fork(),我想到了这样的事情:
begin = clock();
if (fork() == 0) {
for (i = 0; i < n; i++) {
j += i;
}
exit(0);
}
end = clock();
time = (double)(end - begin) / CLOCKS_PER_SEC;
答案 0 :(得分:0)
我决定使用其他两个代码,其中fork()
和线程会执行:
void do_nothing() {
int i;
i = 0;
}
我发现计算时间的最好方法是执行调用时间。对于n = 50000
,我获得了:
$ time ./forks
real 0m25.064s
user 0m3.389s
sys 0m12.731s
$ time ./pthreads
real 0m2.164s
user 0m0.262s
sys 0m1.616s
因此,我使用fork()
创建了流程,并创建(和销毁)了仅创建变量并为其赋予值0
的线程。