Date: Sun, 06 Nov 2005 19:17:52 -0500 From: Nicolas Blais <nb_root@videotron.ca> To: Erich Dollansky <oceanare@pacific.net.sg> Cc: freebsd-threads@freebsd.org Subject: Re: c++ with pthread? Message-ID: <200511061918.00437.nb_root@videotron.ca> In-Reply-To: <436D8181.9090909@pacific.net.sg> References: <200511051927.40752.nb_root@videotron.ca> <436D8181.9090909@pacific.net.sg>
index | next in thread | previous in thread | raw e-mail
[-- Attachment #1 --] On November 5, 2005 11:07 pm, Erich Dollansky wrote: > Hi, > > Nicolas Blais wrote: > > It compiles and works fine. I'm trying to make the same program in C++. > > Is the syntax for pthreading the same as in C? I was wondering if someone > > can point me in the right direction. > > the threading stuff stays the same. > > > Also, is there anything I should be worried about when using pthread and > > C++? (Some years ago, I heard that FreeBSD's pthread didn't like C++... > > could be a false rumour) > > You cannot use classes directly with threading functions. Your classes > must be aware of threading. You need some mechanism to protect classes > which are not threadsafe if more than one thread could access an object > at te same moment of time. > > This is a general problem of threading which might causes problems. > > Do not forget that C++ uses additional data in objects which the > programmer does not see. > > Erich //warn long message Well, at least it's feasible. Actually, so far I've converted an single threaded application which was helped by pthreading so I'm on the right track. (Instead of performing a calculation 5+E07 times, I've split it in 'n' threads that does part of the calculation. Threading gives a small performance boost on my 64/3800 but I'm sure it would be even more on a dual-core or multiprocessor system). Now my current problem is that it uses a class and like you mentionned, and the threads access the same data within the class. This is the desired operation for most of my variables except one which I want to be thread independant. For example: Let's say I have 4 threads performing 1000 calculations. Each thread adds +1 to the global counter so that at the end of the program I have 4000 in that counter. I cannot yet have an individual counter per thread so that at the end of the program, each thread's counter = 1000. I've tried using an array like : array[thread_id] which works fine for small numbers, but as soon as I get into large numbers (way into 'double'), I occasionnaly get corrupt numbers. The data doesn't get corrupted below a counter of around 1+E6. I'm guessing the threads are adding in each other's "individual" counters. From what I found, pthread_key_create() could be what I need, but I haven't found one C++ implementation that could get me to understand it. I did find many C example, but they either heavily depend on malloc(), casts and such or they don't compile at all (some are 5 years old Solaris stuff). Can anyone show me the correct path? Any help is truly appreciated. -- FreeBSD 7.0-CURRENT #0: Sat Nov 5 12:12:36 EST 2005 root@clk01a:/usr/obj/usr/src/sys/CLK01A PGP? : http://www.clkroot.net/security/nb_root.asc [-- Attachment #2 --] -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (FreeBSD) iD8DBQBDbp04z38ton5LGeIRAuouAJwPewuWEIpX0QDV/iGjn96t6GEzAACeNKcR 2OK3cAVCryik/bLvv2yuexc= =I/RQ -----END PGP SIGNATURE-----help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200511061918.00437.nb_root>
