mysleep 的兩種實現

2021-12-29 22:31:23 字數 1079 閱讀 4824

mysleep 的兩種實現

一、#include

#include

#include

void myhandler(int sig) //控制代碼函式什麼也不做

{} int mysleep(int timeout)

int main()

return 0;

} 二、避免競態條件的mysleep

#include

#include

void myhandler(int sig)

struct sigaction act,oact;

sigset_t newmask,oldmask,suspmask;//設定訊號集

act.sa_handler = myhandler;

sigemptyset(&act.sa_mask);//訊號集的初始化

act.sa_flags = 0;

sigaction(sigalrm,&act,&oact);//讀取和修改與sigalrm訊號相關聯的處理動作

sigemptyset(&newmask);//初始化訊號集

sigaddset(&newmask,sigalrm);//為訊號集新增sigalrm訊號

alarm(timeout);//設定鬧鐘

sigdelset(&oldmask,sigalrm);//從訊號集oldmask中刪除sigalrm訊號

sigsuspend(&oldmask);//將當前程序的訊號遮蔽字設為oldmask,在程序接受到訊號之前,程序會掛起,當捕捉乙個訊號,首先執行訊號處理程式,然後從sigsuspend返回,最後將訊號遮蔽字恢復為呼叫sigsuspend之前的值

//pause();//將自己掛起直到有訊號遞達

int ret = alarm(0);//取消鬧鐘

sigaction(sigalrm,&oact,null);//恢復對sigalrm訊號的處理動作

return ret;

} int main()

return 0;

}

棧的兩種實現

順序表實現棧 include include 順序表實現棧 define test head printf n s n function define default sz 5 typedef char datatype typedef struct seqstack seqstack 棧的初始化 ...

棧的兩種實現

棧的基本實現 include stdafx.h include include define maxsize 64 using namespace std 基於陣列實現的棧 class stack 預設建構函式 int push int data 元素入棧 int pop 元素出棧 bool ise...

AspectJ的兩種實現

基於xml方式實現 public class myaspect public void myafterretruning joinpoint joinpoint public inte ce userservice 1.建立實體類 userserviceid class com.itt.c aspe...