1.线程 例360 thread2
注意: 新创建的线程不要使用2dx的内存管理(release, retain)等,也不要调用引擎与节目绘制相关的函数(OpenGL不支持多线程)。
其他读取数据和网络通信可以使用。
1.static pthread_t f1_thread;
2./*线程地址、创建线程的参数 、此线程执行函数、指针参数(不传参数时为null)*/
pthread_create(&f1_thread,NULL, requestThread, &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(®ion_mutex);在没有pthread_mutex_unlock(®ion_mutex);
其他线程执行pthread_mutex_lock(®ion_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); //关闭