再使用上可讓特定條fiber assidn 給某pthread去執行
在win系統上要使用fiber 須先
#define _WIN32_WINNT 0x400 <==
#include
#include
#define FIBER_COUNT 5
void *fiber_context[FIBER_COUNT];
VOID WINAPI fiberProc(void*);
int main()
{
int i;
int fibers[FIBER_COUNT];
for (i = 0; i < FIBER_COUNT; i++)
fibers[i] = i;
fiber_context[0] = ConvertThreadToFiber(NULL);
for (i = 1; i < FIBER_COUNT; i++) {
fiber_context[i] = CreateFiber(0, fiberProc, &fibers[i]);
if (fiber_context[i] != NULL)
printf("Fiber %d created \n", i);
}
for (i = 1; i < FIBER_COUNT; i++) {
if (fiber_context[i] != NULL)
{
SwitchToFiber(fiber_context[i]);
}
}
}
void WINAPI fiberProc(void *fiber_nbr)
{
int nbr;
nbr = *((int*)fiber_nbr);
fprintf(stderr,"Hello from fiber %d\n", nbr);
SwitchToFiber(fiber_context[0]);
}
fiber 再次進入會從上次中斷那點往下繼續去執行
fiber也有屬於自己的fls可提供使用
===========
當systemC 要更新成releace mode /MTD => /MT
==========
使用windos win32 pthread時 須下載新的函示庫
Pre-build.2 裡面包含了include和 lib 分別包含了pthreads for win32 的頭文件和庫文件(包括動態連接庫)
將include 和lib 裡面的內容分別複製到你的編譯器的include 和 lib 目錄,
同時將lib 目錄中的 dll 文件copy 到操作系統的system32 文件夾中。
Project/settings pthreadVC2.lib
===========
TLS(P-thread local storage)
pthread_key_t tlsKey = 0;
void* thr_fn(void* arg){
int TLS_data = 0;
pthread_setspecific(tlsKey, &TLS_data); //將key 跟 data bine再一起
此時使用 TLS_data皆為TLS
pthread_key_delete(tlsKey); //刪除
}
===========
semaphore.h
sem_t sem_key;
sem_init(&sem_key,0,預設值);
sem_wait(&sem_key); //sem_key-- 減為負數 則sleep
sem_post(&sem_key); //sem_key++ 反之
沒有留言:
張貼留言