[Wine] Thread creation in Wine

Ema wineforum-user at winehq.org
Sun Mar 8 03:44:14 CDT 2009


Hi guys,

I was looking at the thread creation API.
Exactly, why do we use PTHREAD_SCOPE_SYSTEM instead of PTHREAD_SCOPE_PROCESS ?
http://source.winehq.org/git/wine.git/?a=blob;f=dlls/ntdll/thread.c#l611

What is the technical difference?
I remember, some years ago, that on SunOS 8 setting the latter it would make one thread only scheduled globally for the process, instead, using the first would let the process use at the same time multiple threads on multiple processors (so a proper multithread application).

Today I tested it with Ubuntu 8.10 and gcc/g++ 4.3.2 and actually there's no difference (on my Intel dual core).
Anyone does know what is the benefit from switching from one to other option?

Attaching some stupid code used by MT testing:

Code:

#include <iostream>
#include <cmath>
#include <pthread.h>

extern "C" void *my_th(void *param) {
	const unsigned int 	CNT=1024;
	double 			mysum=0.0;
	for(unsigned int j = 0; j< CNT; j++)
		for(unsigned int k=0; k < CNT; k++)
			for(unsigned int i=0; i<CNT; i++)
				mysum += i;
	std::cout << "mysum: " << mysum << std::endl;
	return 0;
}

int main(int argc, char *argv[]) {
	pthread_t	pthread_id, pthread_id2;
	pthread_attr_t	attr;

	pthread_attr_init(&attr);
	pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS);
	std::cout << "first thread: " << pthread_create(&pthread_id, &attr, my_th, 0) << std::endl;
	std::cout << "second thread: " << pthread_create(&pthread_id2, &attr, my_th, 0) << std::endl;
	pthread_attr_destroy(&attr);
	pthread_join(pthread_id, 0);
	pthread_join(pthread_id2, 0);
}



Compile with g++ -o test -pthread test.cpp.

Cheers,







More information about the wine-users mailing list