Hi all,
I'm writing a wrapper thread class.
Because Posix "pthread_create" needs a static function, the concrete classes that going to use
the "start" methods will always find a bottleneck in the static method "run_thread"?
I saw different post where some people suggests extern C global function.
Is this the solution? But it must be synchronized?
#include <pthread.h>
class CCThread
{
private:
pthread_mutex_t ccmutex;
/**
This static method must be synchronized with static lock but how I said before this make a bottleneck!!
**/
static void* run_thread(void* ptr)
{
CCThread* thread = (CCThread*)ptr;
thread->run();
}
protected:
public:
CCThread()
{
pthread_mutex_init(&ccmutex,NULL);
}
virtual void run()=0;
pthread_t start()
{
pthread_t thread_id;
//to synchronize start method I don't know how the concrete classes will call
// this method. Ex. Many threads will call this method on the same instance.
pthread_mutex_lock(&ccmutex);
Because Posix "pthread_create" needs a static function, the concrete classes that going to use the "start" methods will always find a bottleneck in the static method "run_thread"?
Why do you think it's a bottleneck? It's just a non-threaded function that is used in the creation of your thread. There's no bottleneck there.
I saw different post where some people suggests extern C global function.
No, don't do that. What you have is pretty standard. As far as I can tell, it was first coined by Pete Becker 'back in 94. It may have been published in the C++ Report back then. It became the model for Java threads.
Is this the solution? But it must be synchronized?