Skip site navigation (1)Skip section navigation (2)
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>