views:

870

answers:

11

Hello,

I'm looking for some easy to use cross-platform threading library written in C or C++.

What's your opinion on boost::thread or Pthreads? Does Pthreads run only on POSIX compliant systems?

What about the threading support in the Qt library?

Thanks for any hints.

A: 

SDL is simple, cross-platform and has threading support.

SurvivalMachine
SDL is rather mainly a multimedia library, isnt it? I'd rather have something more neat.
NumberFour
+2  A: 

Pthreads are running only on POSIX systems. QThread from Qt is a way to go. It is available on platforms: Linux, Mac OS X, Windows, Embedded Linux, Windows CE, Symbian, Maemo.

zoli2k
What do you mean saying "All platforms"
osgx
Yeah, I have this chip here in my toaster, is Qt available for it? `:)`
sbi
Officially supported, win/mac/unix+x/embedded unix/wince/symbian/meamo - Probably more than boost.
Martin Beckett
sbi> yes if your toast provides enough memory!
zoli2k
The Qt license may be a show stopper for some folks...
Jay
http://sourceware.org/pthreads-win32/ ???
susmits
@shakov: With the bread they sell here, the toast's memory is _very_ limited, but I suppose I could scratch a few digits into its surface. But then, it's lifetime really is too limited to go to the trouble. `:)`
sbi
+2  A: 

Qt has pretty good thread support. If you just need to create a thread and run some code in it, QThread is all you need. There are many other high-level classes that can help you with thread pools or even abstract the concurrent execution (the QtConcurrent framework).

Lukáš Lalinský
Qt indeed has a good threading library; it works very well for Qt applications since you can connect signals across threads. If you're using Qt elements, I would stick with Qt threads.
Will
A: 

Pthread is part of Posix, but not every posix systems will have threads. pthreads is most portable.

What platforms will you support?

osgx
Well, Pthreads has no problems running on Linux and other Unix systems I presume. But what about Pthreads on Windows?
NumberFour
I use pthreads on WIndows (compiled in cygwin). So there is support.
Martin York
+16  A: 

Boost.Thread is the draft for the coming standard threading library of the C++ language. Knowing that, I prefer to use it as it provide some strong guarantees (because it becomes standard).

Klaim
+7  A: 

There is a threading library coming with C++11. It's built upon the boost threading library. Unfortunately, I seem to remember that there are non-trivial differences between Boost.Threads and what C++11 comes with. Still, if you plan to switch to the C++ standard threading library, I believe Boost.Threads is the closest you can get to now.

I suppose that, under the hood, these libraries will use Pthreads on POSIX systems and whatever native threading support is available elsewhere.

Disclaimer: I haven't worked with either of the two.

sbi
+3  A: 

Also have a look at OpenMP, it's a set of (somewhat standard) pragmas specifications that is supported by most major compilers. The good of OpenMP is that it's simple and that your code can be easily compiled in both single and multi-threaded versions.

Just a simple example:

std::vector<double> a, b;
...
double sum = 0.0;
...
#pragma omp parallel for reduction(+:sum)
  for (i=0; i < n; i++)
    sum = sum + (a[i] * b[i]);

It's obviously possible to do also more complex things.

baol
Is OpenMP supported on Windows too?
NumberFour
Yes, OpenMP is supported on Windows, by Visual Studio 2005 and later, and of course Intel compilers.
Chris O
And it should not introduce any dependency.
baol
But the fact is that OpenMP is designed rather for parallel task execution than just regular threading which deals with synchronization, mutexes...etc. Right? I mean OpenMP isn't just suitable for creating a multithreaded server for example.
NumberFour
OpenMP definitely has synchronization primitives, but yes, I'd not use it to write a web server.
baol
A: 

wxWidgets has thread classes, and as wxWidgets is platform independent, it might just be the best thing for u.

the100rabh
+1  A: 

List the concerning platforms. If you're only using say, Linux/Mac/Windows, then boost::thread will likely do you fine until C++0x (harhar) provides std::thread.

DeadMG
+1  A: 

Boost.Threads is built on top of PThreads on UNIX systems and Win32 Threads on Windows.

The boost library is syntactically simple and all of the hairy business of properly interfacing C++ code with C libraries is taken care of behind the scenes. If you're not very comfortable with C++, however, PThreads might seem more straight-forward with its simple C API.

Qt Threads is also a good library, but because I use several other boost libraries, I'll compile and link against Boost no matter what. I might not always link against Qt. And, well, I just don't want to remember how to use two different libraries.

Dr. Watson
+1  A: 

I have used pthreads for code that work on multiple platforms. To get around the Windows lack of pthreads, I have used the following open source library with great success: POSIX Threads for Windows

Starkey