C C 實現乙個多執行緒複製的cp命令

2021-10-12 07:00:02 字數 1994 閱讀 6315

int

pthread_create

(pthread_t *thread,

const pthread_attr_t *attr,

void*(

*start_routine)

(void*)

,void

*arg)

;功能:建立執行緒

thread:用於獲取執行緒id,是輸出型的引數

attr:執行緒的屬性,一般寫null採用預設方式建立即可

start_routine:執行緒的入口函式

arg:執行緒入口函式的引數

返回值:成功返回0,失敗返回錯誤碼

pthread_t pthread_self

(void);

功能:獲取執行緒id

intpthread_equal

(pthread_t t1, pthread_t t2)

;功能:用於比較兩線程id是否相等

注意:有些作業系統的執行緒id是以結構體形式實現的,因此不能直接使用==比較

intpthread_join

(pthread_t thread,

void

**retval)

;功能:等待指定的執行緒結束,並獲取執行緒的結束返回值

thread:要等待的執行緒,如果子執行緒沒有結束,當前執行緒會阻塞

retval:是乙個二級指標,用於儲存執行緒入口函式的返回值

注意:預設情況下主線程結束子執行緒會一起結束。

使用時需要包含pthread.h標頭檔案,編譯時需要新增-pthread引數

#include

#include

#include

#include

#include

#include

#include

typedef

struct threadcp

threadcp;

void

*run

(void

* arg)

;while

(cp->start+

4096

< cp->end)

lseek

(cp->src_fd,cp->start,

seek_set);

read

(cp->src_fd,buf,cp->end-cp->start)

;lseek

(cp->dest_fd,cp->start,

seek_set);

write

(cp->dest_fd,buf,cp->end-cp->start)

;free

(cp);}

intmain

(int argc,

const

char

* ar**)

int thread_cnt;

sscanf

(ar**[3]

,"-t%d"

,&thread_cnt)

;int src_fd =

open

(ar**[1]

,o_rdonly,

0644);

if(0> src_fd)

int dest_fd =

open

(ar**[2]

,o_wronly|o_creat,

0644);

if(0> dest_fd)

size_t size =

lseek

(src_fd,0,

seek_end);

pthread_t tid[thread_cnt]

;for

(int i=

0; i)for

(int i=

0; i)close

(src_fd)

;close

(dest_fd)

;}

基於多執行緒的乙個檔案複製練習

from threading import thread,lock import os from time import sleep lock lock urls home tarena 桌面 home tarena 模板 home tarena home tarena filename input...

Python 實現乙個簡單的多執行緒

import threading def main str print str def create thread num,args threads for i in range num try t threading.thread target main,args args t.start exc...

乙個多執行緒程式

這個程式會讓你深刻的體會時間片,執行緒的優先順序!建議多測試這個程式,一定要看下面的注。using system using system.collections.generic using system.text using system.threading namespace 乙個多執行緒程式 ...