Re: Threads: incompatibilities between C and C++?
On 2012-05-14 18:13:37 +0000, M J said:
Recently I watched a speech made by Hans Boehm on Channel #9 where he
mentioned an incompatibility between C11 and C++11. I think he was
talking about a difference between thread libraries. Does anyone know
what these differences consist of?
Thread support in C11 is based on function calls, pretty much like
pthreads. C++11 uses classes and templates. Here's a trivial (and
incomplete) example:
// in C:
int f(void*) {
printf("Hello, world! From a thread!\n");
}
int main() {
thrd_t thr;
int res = thrd_create(&thr, f, NULL);
if (res == thrd_success) {
thrd_join(thr, NULL);
}
return 0;
}
// in C++:
void f() {
printf("Hello, world! From a thread!\n");
}
int main() {
std::thread thr(f);
thr.join();
return 0;
}
The difference in the signatures of the called functions comes about
because thrd_create takes a function pointer of type int(*)(void*); in
C++, the std::thread constructor takes an arbitrary callable type and
an appropriate argument list.
This isn't properly called "an incompatibility", however. The
underlying design models are quite different.
There is some bridging from C++ to C, maybe. Most of the C++ thread
support types can have a member function named native_handle() that
returns an object whose type is a nested type named native_handle_type.
That might give you a hook into the C threading support; it's
implementation defined whether native_handle() exists, and if it does,
it's implementation-defined what you can do with it.
--
Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
(www.petebecker.com/tr1book)
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]