线程和信号量

来源:互联网 发布:淘宝情趣内衣好评50字 编辑:程序博客网 时间:2024/06/01 09:04

1.线程 例360 thread2

注意: 新创建的线程不要使用2dx的内存管理(release, retain)等,也不要调用引擎与节目绘制相关的函数(OpenGL不支持多线程)。

    其他读取数据和网络通信可以使用。

1.static pthread_t  f1_thread;

2./*线程地址、创建线程的参数 、此线程执行函数、指针参数(不传参数时为null)*/

    pthread_create(&f1_thread,NULLrequestThread, &i1);

static void *requestThread(void *data){    int *x = (int*)data;    CCLog("requestThread : %d", *x);        pthread_mutex_lock(®ion_mutex);    s_test++;    while (1)    {        s_test++; sleep(1);        if(s_test == 20)        {            CCLog("unlock");            pthread_mutex_unlock(®ion_mutex);            pthread_exit(0);                                                                      //结束此线程下面的将不会执行,线程结束后不会自动释放pthread_mutex_lock        }        CCLog("11");    }}

pthread_detach(f1_thread);                                                  //线程运行结束后回自动释放所有资源

pthread_join(f1_thread, NULL);                                           //线程f1_thread执行完才会执行其他线程pthread_detach(f1_thread)后不好使

pthread_mutex_destroy(pthread_mutex_t *mutex);

void pthread_exit(void* retval);

3.pthread_mutex_t region_mutex =PTHREAD_MUTEX_INITIALIZER;                          //给线程访问的资源加锁

一个线程pthread_mutex_lock(&region_mutex);在没有pthread_mutex_unlock(&region_mutex);

其他线程执行pthread_mutex_lock(&region_mutex);将被阻塞直到先执行lock的线程unlock后才执行

2.信号量 例360 semaphore

不同平台的初始化方式可能不同。

实现了规定几个线程可以同时访问某一资源,如果值规定一个线程可以访问和 pthread_mutex_lock差不多,具体还是有区别的

sem_t *binSem;

/*信号量的名、选择创建或打开一个现有的信号灯、权限位、信号灯初始值*/

binSem = sem_open(SEM_NAME,O_CREAT,0644,0);

sem_wait(binSem);                                                          //信号量减一,信号量小于0此线程堵塞等待sem_post(binSem);再执行

sem_post(binSem);                                                        //信号量加1

sem_unlink(SEM_NAME);                         //断开连接

sem_close(binSem);                                  //关闭







































原创粉丝点击