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>
next in thread | previous in thread | raw e-mail | index | archive | help
--nextPart1210774.aLU6Faaqad Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline 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++.= =20 > > Is the syntax for pthreading the same as in C? I was wondering if someo= ne > > 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. =20 Actually, so far I've converted an single threaded application which was=20 helped by pthreading so I'm on the right track. (Instead of performing a=20 calculation 5+E07 times, I've split it in 'n' threads that does part of the= =20 calculation. Threading gives a small performance boost on my 64/3800 but I'= m=20 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= =20 the threads access the same data within the class. This is the desired=20 operation for most of my variables except one which I want to be thread=20 independant. =46or example: Let's say I have 4 threads performing 1000 calculations. Eac= h=20 thread adds +1 to the global counter so that at the end of the program I ha= ve=20 4000 in that counter. I cannot yet have an individual counter per thread so= =20 that at the end of the program, each thread's counter =3D 1000. I've tried using an array like : array[thread_id] which works fine for smal= l=20 numbers, but as soon as I get into large numbers (way into 'double'), I=20 occasionnaly get corrupt numbers. The data doesn't get corrupted below a=20 counter of around 1+E6. I'm guessing the threads are adding in each other's= =20 "individual" counters. =46rom what I found, pthread_key_create() could be what I need, but I haven= 't=20 found one C++ implementation that could get me to understand it. I did find= =20 many C example, but they either heavily depend on malloc(), casts and such = or=20 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. =2D-=20 =46reeBSD 7.0-CURRENT #0: Sat Nov 5 12:12:36 EST 2005 =20 root@clk01a:/usr/obj/usr/src/sys/CLK01A=20 PGP? : http://www.clkroot.net/security/nb_root.asc --nextPart1210774.aLU6Faaqad Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (FreeBSD) iD8DBQBDbp04z38ton5LGeIRAuouAJwPewuWEIpX0QDV/iGjn96t6GEzAACeNKcR 2OK3cAVCryik/bLvv2yuexc= =I/RQ -----END PGP SIGNATURE----- --nextPart1210774.aLU6Faaqad--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200511061918.00437.nb_root>