线程基础知识

 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 }

 

posted @ 2018-03-02 15:13  沙耶耶  阅读(83)  评论(0)    收藏  举报