1、linux 信號量操作函數
semget()
可以使用系統調用semget()創建一個新的信號量集,或者存取一個已經存在的信號量集:
系統調用:semget();
原型:intsemget(key_t key,int nsems,int semflg);
返回值:如果成功,則返回信號量集的IPC標識符。如果失敗,則返回-1:errno=EACCESS(沒有許可權)
EEXIST(信號量集已經存在,無法創建)
EIDRM(信號量集已經刪除)
ENOENT(信號量集不存在,同時沒有使用IPC_CREAT)
ENOMEM(沒有足夠的內存創建新的信號量集)
ENOSPC(超出限制)
系統調用semget()的第一個參數是關鍵字值(一般是由系統調用ftok()返回的)。系統內核將此值和系統中存在的其他的信號量集的關鍵字值進行比 較。打開和存取操作與參數semflg中的內容相關。IPC_CREAT如果信號量集在系統內核中不存在,則創建信號量集。IPC_EXCL當和 IPC_CREAT一同使用時,如果信號量集已經存在,則調用失敗。如果單獨使用IPC_CREAT,則semget()要麼返回新創建的信號量集的標識 符,要麼返回系統中已經存在的同樣的關鍵字值的信號量的標識符。如果IPC_EXCL和IPC_CREAT一同使用,則要麼返回新創建的信號量集的標識 符,要麼返回-1。IPC_EXCL單獨使用沒有意義。參數nsems指出了一個新的信號量集中應該創建的信號量的個數。信號量集中最多的信號量的個數是 在linux/sem.h中定義的:
#defineSEMMSL32/*<=512maxnumofsemaphoresperid*/
下面是一個打開和創建信號量集的程序:
intopen_semaphore_set(key_t keyval,int numsems)
{
intsid;
if(!numsems)
return(-1);
if((sid=semget(mykey,numsems,IPC_CREAT|0660))==-1)
{
return(-1);
}
return(sid);
}
};
==============================================================
semop()
系統調用:semop();
調用原型:int semop(int semid,struct sembuf*sops,unsign ednsops);
返回值:0,如果成功。-1,如果失敗:errno=E2BIG(nsops大於最大的ops數目)
EACCESS(許可權不夠)
EAGAIN(使用了IPC_NOWAIT,但操作不能繼續進行)
EFAULT(sops指向的地址無效)
EIDRM(信號量集已經刪除)
EINTR(當睡眠時接收到其他信號)
EINVAL(信號量集不存在,或者semid無效)
ENOMEM(使用了SEM_UNDO,但無足夠的內存創建所需的數據結構)
ERANGE(信號量值超出范圍)
第一個參數是關鍵字值。第二個參數是指向將要操作的數組的指針。第三個參數是數組中的操作的個數。參數sops指向由sembuf組成的數組。此數組是在linux/sem.h中定義的:
/*semop systemcall takes an array of these*/
structsembuf{
ushortsem_num;/*semaphore index in array*/
shortsem_op;/*semaphore operation*/
shortsem_flg;/*operation flags*/
sem_num將要處理的信號量的個數。
sem_op要執行的操作。
sem_flg操作標志。
如果sem_op是負數,那麼信號量將減去它的值。這和信號量控制的資源有關。如果沒有使用IPC_NOWAIT,那麼調用進程將進入睡眠狀態,直到信號 量控制的資源可以使用為止。如果sem_op是正數,則信號量加上它的值。這也就是進程釋放信號量控制的資源。最後,如果sem_op是0,那麼調用進程 將調用sleep(),直到信號量的值為0。這在一個進程等待完全空閑的資源時使用。
2、請問excel中標准誤(SEM)的公式是什麼?
如下參考:
1.首先選擇最後一個標准偏差來顯示復制的單元格,如下圖所示。
2.點擊[start]-[autosum]旁邊的三角形,就會出現一個下拉菜單。點擊【其他功能】如下圖所示。
3.出現[insertfunction]窗口,點擊[selectcategory],選擇[all],找到standarddeviation[STDEVP]函數,如下圖所示。
4.單擊ok後,單擊箭頭所指的位置並選擇數據,如下圖所示。
5.選擇後,點擊「ok」,可以看到計算出的標准差,如下圖所示。
3、sem數據分析中常用的函數有哪些?
1
top-N數據數據分析
1、升序降序
2、抓重點
2
1、百分百
2、效率
3、處理數據
3
1.時段消費
2.時段轉化
3.時段效果
4
單個詞分析
一類詞分析
詞根分析
5
流程分析
薄弱環節提升
三倍績效達成
處理數據
4、sem數據分析中常用的函數有哪些?
常用函數公式:
1、LEN函數:用於統計一個數據或者一個詞出現的次數
使用公式:=LEN(數據),需要進行統計的關鍵詞,主要作用就是計算關鍵詞出現的次數
2、countif函數:統計一個區域的數據中符合一個條件的總數量
使用公式:=countif(區域,條件) 需要注意符號是英文狀態,除了字母,都要加一下雙引號。
3、vlookup函數:縱向查找
使用公式:=vlookup(G:G,A:B,2) G:G相同的一列,A:B查找范圍,2是查找的第幾列
如果沒有相同值,可以自己創造一個相同值。
4、sumif函數:條件求和
使用公式:=sumif(C:C,」>20」,B:B)
C列條件大於20,b列的和,注意符號使用英文狀態下,除了字母都要添加雙引號
5、sumifs函數:多條件求和
使用公式:=sumifs(B:B,C:C,」>80」,D:D,」>80」)
注意先寫要求和的區域,再寫條件
常用的sem數據分析函數,各位小夥伴們學會了嗎?可以多多操作,牢牢記住公式,讓自己的工作更加輕松,事半功倍。
5、linux中有什麼函數可替代waitForSingleObject
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Windows中的WaitForSingleObject()函數對應在Linux中的sem_wait(),SetEvent對應sem_post(),
參考下面的Linux程序:
#include
#include
#include
#include
#include
#include
char tem[10]; //讀寫公共區
sem_t sem;
void* thread_fun(void*);
int main()
{
int counter=0;
pthread_t mythread;
sem_init(&sem,0,0);
pthread_create(&mythread,NULL,thread_fun,NULL);
while(counter<10) //往讀寫區里寫10次'f'
{
tem[counter]='f';
counter++;
sem_post(&sem);
}
pthread_join(mythread,NULL); //等待子線程
sem_destroy(&sem);
exit(0);
}
void* thread_fun(void* arg) //子線程函數
{
int counter=0;
while(counter<10&&sem_wait(&sem)==0)
{
printf("%c",tem[counter]); //讀出來顯示
counter++;
//sem_wait(&sem);
}
pthread_exit(NULL);
}
6、semtake函數可以在中斷中使用嗎
可以使用的,semtake函數可以在中斷中使用的。
手打,望採納!