线程基础知识
Linux 系统下任务调度策略主要有三种:
1、SCHED_OTHER:普通任务调度策略。
2、SCHED_FIFO:实时任务调度策略,先到先服务。一旦占用cpu则一直运行,直到有更高优先级任务到达或自己放弃。
3、SCHED_RR:实时任务调度策略,时间片轮转。当任务的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾
线程同步方法四种:临界区、信号量、互斥锁、事件,以下可在VS2010运行
1.临界区
1 static int globol_count=0; 2 CRITICAL_SECTION Critical; //定义临界区句柄 3 DWORD WINAPI MyThreadProc1(LPVOID lpParameter) 4 { 5 while(1) 6 { 7 EnterCriticalSection(&Critical); 8 printf("thread 1 globol_count=%d\n\r",globol_count); 9 ++globol_count; 10 Sleep(100); 11 LeaveCriticalSection(&Critical); 12 } 13 return 0; 14 } 15 DWORD WINAPI MyThreadProc2(LPVOID lpParameter) 16 { 17 while(1) 18 { 19 EnterCriticalSection(&Critical); 20 printf("thread 2 globol_count=%d\n\r",globol_count); 21 ++globol_count; 22 Sleep(100); 23 LeaveCriticalSection(&Critical); 24 } 25 return 0; 26 }
1 void __cdecl usefunptr(void (* temp)(int n)) 2 { 3 temp(867); 4 } 5 void main() 6 { 7 double c=7; 8 auto i=c; 9 10 printf("%s\n\r",typeid(i).name()); 11 12 int *p=nullptr; 13 14 15 void (* fun4)(int n); 16 fun4=fun5; 17 18 DWORD threadID; 19 HANDLE hThread; 20 InitializeCriticalSection(&Critical); 21 hThread = CreateThread(NULL,0,MyThreadProc1,NULL,0,&threadID); // 创建线程 22 hThread = CreateThread(NULL,0,MyThreadProc2,NULL,0,&threadID); // 创建线程 23 24 25 usefunptr(fun4); 26 27 return ; 28 }

浙公网安备 33010602011771号