分类: C/C++
2014-08-20 20:39:39
Linux
1. 线程函数:pthread_create, pthread_join
2. 线程属性:绑定线程/非绑定线程;分离状态/非分离状态;优先级
3. 线程数据:pthread_keycreate, pthread_setpecific ,同键值在不通的线程中值不同,觉得意义不大
4. 同步:
l 互斥锁:内核对象,可以设置跨进程同步,pthread_mutex_t ,pthread_mutex_init , pthread_mutex_lock , pthread_delay_unlock, pthread_mutex_destroy;fork下可以设置进程共享属性,实现匿名mutex跨进程(但这要求必须是父子进程才能都认识同一个mutex,没有找到windows下命名mutex那样的例子)
l 条件变量:pthread_cond_t , pthread_cond_wait,pthread_cond_signal,通常和mutex一起使用,pthread_cond_wait会解开锁并等待条件变量
l 信号量:sem_t ,sem_init ,sem_wait,sem_post
l 其他:可以使用文件等共享资源作为同步标记,方法有很多
5. 其他
l pthread_cond_timedwait替代sleep, 可以随时触发或超时触发,和条件变量同时使用
Windows
1. 线程函数:CreateThread,ExitThread (属于API), _beginthreadex,_endthreadex, _beginthread, SuspendThread, ResumeThread,GetCurrentThread不要使用CreateThread,因为beginthreadex多了一个线程数据块tiddata
2. 线程属性:优先级——共6个级别,SetThreadPriority, GetThreadPriority
3. 线程数据:Thread Local Storage,觉得TLS和Linux下的线程数据是一样的,其实只是在调用时更方便,同时也会造成程序一定程度的混乱
4. 同步:
l 互斥锁mutex: CreateMutex,ReleaseMutex,内核对象,通过命名mutex可以实现跨进程的互斥;跨进程时,只有挂起mutex的进程才能release和多次挂起
l 临界区Critical Sections:CRITICAL_SECTION,EnterCriticalSection,LeaveCriticalSection,轻量级用户态对象,只能用于进程内跨线程的同步
l Event:CreateEvent,WaitForSingleObject/WaitForMutileObject,ResetEvent,自动对象/手动对象,内核对象,应该也可以通过命名event实现跨进程的同步