Saturday, March 26, 2016

Linux Posix Thread

Using Eclipse Mars C/C++ IDE project, 
properties->Setting->C/C++->Linker->Libraries->pthread will set linker option -pthread
pthread_create, _join _mutext_lock _unlock _t _exit, clean C-code


#include  <pthread.h>
#include <stdio.h>

extern void safe_api();
static int shared;

void *func(void *arg)
{
 printf("p thread executing...%\s\n",(char*)arg);
 pthread_exit((void*) 99);
}
// properties settings c/c++ linker libraries add pthread -pthread
int main()
{
 pthread_t h,t1,t2;
 int exit_code;
 pthread_create(&h, NULL, func, "pass in data");
 printf("%s","main thread\n");
 pthread_join(h, (void **)&exit_code);
 //getchar();

 pthread_create(&t1,NULL,safe_api,NULL);
 pthread_create(&t2,NULL,safe_api,NULL);
 pthread_join(t1,NULL);
 pthread_join(t2,NULL);

 printf("%d",shared);
}

pthread_mutex_t lock;
void safe_api()
{
   int i;
   //for(i =0;i<1000000;i++) shared++; no local fine

   for(i =0;i<1000000;i++)
  {
    pthread_mutex_lock(&lock);
    int a=shared;
    a++;  // thread local ++ need mutex
    shared=a;
    pthread_mutex_unlock(&lock);
  }
}

No comments:

Post a Comment