线程和信号量

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);                                  //关闭







































  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值