linux线程学习
按照书上写的,不知道为什么有问题:
//已解决,参考最新的blog,哈哈
#include <stdlib.h> #include <pthread.h> #include <stdio.h> #include <unistd.h> struct foo { int f_count; pthread_mutex_t f_lock; }; struct foo* AllocFoo() { foo* lpFoo = (foo*)malloc(sizeof(struct foo)); if(NULL != lpFoo) { lpFoo->f_count = 1; if(0 != pthread_mutex_init(&lpFoo->f_lock,NULL)) { printf("pthread_mutex_init error.\n"); free(lpFoo); return NULL; } } printf("Alloc a Foo.\n"); return lpFoo; } bool DestoryFoo(foo* apFoo) { pthread_mutex_lock(&apFoo->f_lock); if(--apFoo->f_count == 0) { printf("Now f_coount:%d.\n",apFoo->f_count); pthread_mutex_unlock(&apFoo->f_lock); pthread_mutex_destroy(&apFoo->f_lock); free(apFoo); printf("Destroy foo.\n"); return true; } else { printf("Now f_coount:%d.\n",apFoo->f_count); pthread_mutex_unlock(&apFoo->f_lock); return false; } } void HoldFoo(foo* apFoo) { pthread_mutex_lock(&apFoo->f_lock); ++apFoo->f_count; printf("Now f_coount:%d.\n",apFoo->f_count); pthread_mutex_unlock(&apFoo->f_lock); } void PrintTids(const char* s); void* ThreadFun(void* Arg) { PrintTids(""); foo* lpFoo = (foo*)Arg; for(int i=0;i<5;++i) { HoldFoo(lpFoo); } } void PrintTids(const char* s) { pid_t lPid = getpid(); pthread_t lTid = pthread_self(); printf("%s pid:%u,tid:%u (0x%x).\n",s,(unsigned int)lPid , (unsigned int)lTid,(unsigned int)lTid); } int main() { foo* lpFoo = AllocFoo(); pthread_t lTid = 0; int lErr = pthread_create(&lTid,NULL,ThreadFun,NULL); if(0 != lErr) { exit(1); } printf("main thread"); //HoldFoo(lpFoo); bool lIsDestory = false; do { lIsDestory = DestoryFoo(lpFoo); }while(!lIsDestory); }