c++ with pthread?
Nicolas Blais
nb_root at videotron.ca
Sun Nov 6 16:18:02 PST 2005
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 at clk01a:/usr/obj/usr/src/sys/CLK01A
PGP? : http://www.clkroot.net/security/nb_root.asc
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-threads/attachments/20051106/1193dc28/attachment.bin
More information about the freebsd-threads
mailing list