c++ with pthread?

Norbert Koch nkoch at demig.de
Sun Nov 6 23:12:01 PST 2005

If you want to have classes with threads, I suggest
you try the port devel/commoncpp. It is a portable
c++ library for multi-threading. From my experience
it works fine.

Nicolas Blais (nb_root at videotron.ca) schrieb:
> 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

More information about the freebsd-threads mailing list