Linux

1.       线程函数:pthread_create,pthread_join

2.       线程属性:绑定线程/非绑定线程;分离状态/非分离状态;优先级

3.       线程数据:pthread_keycreate,pthread_setpecific ,同键值在不通的线程中值不同,觉得意义不大

4.       同步:

互斥锁:内核对象,可以设置跨进程同步,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.       同步:

互斥锁mutex CreateMutex,ReleaseMutex,内核对象,通过命名mutex可以实现跨进程的互斥;跨进程时,只有挂起mutex的进程才能release和多次挂起

临界区Critical SectionsCRITICAL_SECTION,EnterCriticalSection,LeaveCriticalSection,轻量级用户态对象,只能用于进程内跨线程的同步

l  Event:CreateEvent,WaitForSingleObject/WaitForMutileObject,ResetEvent,自动对象/手动对象,内核对象,应该也可以通过命名event实现跨进程的同步

11-08 08:26