윈도우즈 다중 루틴 c 언어 첫 번째 구현
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "pthreadVC2.lib")
#include <pthread.h>
void *thread(void *args)
{
int i;
for(i=0;i<3;i++)
printf("This is a pthread.
");
return (void *)0;
}
int main(void)
{
pthread_t id;
int i,ret;
ret=pthread_create(&id,NULL,thread,NULL);
if(ret!=0){
printf ("Create pthread error!
");
exit (1);
}
for(i=0;i<3;i++)
printf("This is the main process.
");
pthread_join(id,NULL);
return (0);
}
실행하기 전에 다음과 같은 구성이 필요합니다.1. PTHREAD의 WINDOWS 개발 패키지 pthreads-w32-2-4-0-release를 다운로드합니다.exe (모든 버전 사용 가능)
http://sourceware.org/pthreads-win32/, 디렉토리의 압축을 풉니다.
2.include와lib 폴더를 찾으면 VC++6.0의 헤더 파일 경로와 정적 링크 라이브러리 경로 아래에 각각 추가합니다.
a).Tools->Options, Directory 페이지를 선택한 다음 Show directories for: 에서 Include files (기본값) 를 선택하여 Directories에include 경로를 추가합니다.Show directories for:에서 Library files 를 선택합니다.
Directories에 lib의 경로를 추가합니다.
b).Project->Settings, Link 페이지를 선택한 다음lib 아래의 *.Object/library Modules에 lib 파일을 추가합니다.
lib 파일은 공백으로 구분됩니다.
c).lib 아래의 *.dll 파일을 프로젝트 디렉터리, 즉 루트 디렉터리로 복사합니다.
참고: 비주얼 스튜디오 2010도 구성 필요
pthread_create(&id,NULL,thread,NULL);
첫 번째 파라미터는 라인 식별자를 가리키는 지침입니다.두 번째 파라미터는 라인 속성을 설정하는 데 쓰인다.세 번째 매개 변수는 루틴 운행 함수의 시작 주소입니다.마지막 매개 변수는 함수를 실행하는 매개 변수다.
스레드 생성에 성공하면 함수가 0을 반환하고 0이 아니면 스레드 생성에 실패하며 일반적인 오류 반환 코드는 EAGAIN 및 EINVAL입니다.전자는 시스템이 새로운 라인을 만드는 것을 제한한다는 것을 나타낸다. 예를 들어 라인의 수가 너무 많다.후자는 두 번째 파라미터가 대표하는 라인 속성 값이 불법임을 나타낸다.스레드를 만드는 데 성공한 후, 새로 만든 스레드는 매개 변수 3과 매개 변수 4가 확정된 함수를 실행하고, 원래의 스레드는 다음 줄 코드를 계속 실행합니다.
pthread_create () 에서 만든 루틴은 주 루틴 (즉 pthread create () 을 호출하는 루틴) 과 같은 실행 시퀀스를 가지지 않고 start 를 실행합니다.routine 함수.thread는 만든 루트 ID를 되돌려줍니다.attr는 루트를 만들 때 설정한 루트 속성입니다. (아래 참조)pthread_create () 의 반환값은 루틴 생성이 성공했는지 여부를 나타냅니다.비록arg는void*유형의 변수이지만, 또한 임의의 유형의 매개 변수로start 에 전달할 수 있습니다routine () 함수;동시에 startroutine ()는void* 형식의 반환값을 되돌릴 수 있으며, 이 반환값은 다른 형식일 수도 있으며 pthreadjoin () 을 가져옵니다.
pthread_create()의 attr 매개 변수는 구조 포인터로 구조의 요소는 각각 새 스레드의 운행 속성에 대응하며 주로 다음과 같은 몇 가지를 포함한다.
__detachstate, 새 스레드가 프로세스의 다른 스레드와 동기화되지 않았는지 표시합니다. 위치를 설정하면 pthread 를 사용할 수 없습니다.join () 을 동기화하고 종료할 때 사용하는 자원을 스스로 방출합니다.기본값은 PTHREAD 입니다.CREATE_JOINABLE 상태.이 속성도 라인을 만들고 실행한 후 pthreaddetach()로 설정하고 PTHREAD 로 설정하면CREATE_DETACH 상태(작성 시 설정 또는 런타임 설정에 관계없이)는 PTHREAD 로 다시 복원할 수 없습니다.CREATE_JOINABLE 상태.
__schedpolicy, SCHED 를 비롯한 새로운 스레드의 스케줄링 정책을 나타냅니다.OTHER(일반, 비실시간), SCHEDRR(실시간, 회전법) 및 SCHEDFIFO(실시간, 선입선출) 세 가지, 기본값은 SCHEDOTHER 이후 두 가지 스케줄링 정책은 수퍼유저에게만 적용됩니다.실행 시 pthread 사용 가능setschedparam () 으로 변경합니다.
__schedparam, struct sched 1개param 구조, 현재 sched 하나만 있음priority 정형 변수는 라인의 운행 우선순위를 표시합니다.이 매개변수는 스케줄러 정책이 실시간(즉, SCHED RR 또는 SCHED FIFO)일 때만 유효하며 실행 시 pthreadsetschedparam () 함수를 변경합니다. 기본값은 0입니다.
__inheritsched, PTHREADEXPLICIT_SCHED 및 PTHREADINHERIT_SCHED, 전자는 새 스레드가 명시적으로 지정한 스케줄링 정책과 스케줄링 매개 변수 (즉 attr의 값) 를 사용하고, 후자는 호출자의 스레드를 계승하는 값을 표시합니다.기본값은 PTHREAD 입니다.EXPLICIT_SCHED.
__scope는 스레드 간 경쟁 CPU의 범위를 나타낸다. 즉, 스레드 우선순위의 유효한 범위를 말한다.POSIX의 표준에는 PTHREAD 라는 두 가지 값이 정의되어 있습니다.SCOPE_SYSTEM 및 PTHREADSCOPE_PROCESS는 시스템의 모든 스레드와 함께 CPU 시간을 경쟁하는 것을 의미하며, 후자는 같은 프로세스의 스레드와만 CPU 시간을 경쟁하는 것을 의미한다.현재 LinuxThreads는 PTHREAD 만 구현하였습니다.SCOPE_SYSTEM 1값.
pthread_attr_t 구조에는 일부 값이 있지만 pthread 를 사용하지 않습니다.create()로 설정합니다.
이러한 속성을 설정하기 위해 POSIX는 pthread 를 포함한 일련의 속성 설정 함수를 정의했습니다.attr_init()、pthread_attr_destroy () 및 각 속성과 관련된 pthreadattr_get---/pthread_attr_set---함수.
Linux의 루틴 구현은 핵 밖에서 이루어지고 핵 내에서 프로세스를 만드는 인터페이스를 제공한다dofork().커널은 두 개의 시스템 호출을 제공한다clone () 와 fork (), 최종적으로 다른 매개 변수로do 호출fork () 핵내 API.물론 루틴을 실현하려면 다중 프로세스(사실 경량급 프로세스) 공유 데이터 세그먼트에 대한 핵심 지원이 없으면 안 되기 때문에dofork()는 CLONE 을 비롯한 다양한 매개변수를 제공합니다.VM(공유 메모리 공간), CLONEFS(파일 시스템 정보 공유), CLONEFILES(공유 파일 설명자 테이블), CLONESIGHAND(공유 신호 핸들 테이블) 및 CLONEPID(공유 프로세스 ID, 코어 내부 프로세스, 즉 0번 프로세스에만 유효).fork 시스템 호출을 사용할 때, 핵 호출dofork()는 공유 속성을 사용하지 않으며 프로세스는 독립된 운행 환경을 가지고 있으며 pthread 를 사용합니다create () 로 라인을 만들 때, 최종적으로 모든 속성을 설정해서clone (), 이 매개 변수는 모두 핵 내의do 에 전송됩니다fork () 를 통해 생성된 프로세스는 공유된 실행 환경을 가지고 있으며, 창고만 독립되어 있습니다.clone () 입력.
리눅스 루틴은 핵 내에 경량급 프로세스 형식으로 존재하며 독립된 프로세스 테이블 항목을 가지고 있으며 모든 창설, 동기화, 삭제 등 작업은 핵 밖 pthread 라이브러리에서 진행된다.pthread 라이브러리는 프로세스마다 독립적이고 유일한 관리 루트 ( pthread manager () 를 사용하여 루트의 생성과 종료를 관리하고 루트의 ID를 분배하며, 루트와 관련된 신호 (예를 들어 Cancel) 를 보내고, 주 루트 (pthread create () 의 호출자는 파이프를 통해 요청한 정보를 관리 루트에 전달합니다.
참고 자료http://blog.163.com/kmustchenb@126/blog/static/110905765200973173844291/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.