Linux & C 스레드 제어 수업 후 연습 문제
Q2: 다중 스레드 프로그램을 작성하여 주 스레드에 세 개의 서브스레드를 만들고 세 개의 서브스레드가 공유하는 전역 변수를 동시에 수정해야 한다. 어떤 결과가 나오는지 보자.
물론 예상치 못한 결과가 발생할 수 있기 때문에 정확하게 수정할 수 없다. 이 문제만 연구하는 것은 의미가 없다. 라인 간의 자원이 동기화되지 않는 문제를 해결한다. - 상호 잠금 코드는 다음과 같다. 상호 잠금의 용법은 다음과 같다.
Q3: 다중 스레드 프로그램에서 어떻게 스레드의 동기화를 실현하는지, 어떤 방식이 있습니까?
나는 두 가지 방식을 안다. 즉, 상호 배척 자물쇠와 조건 변수 상호 배척 자물쇠이다. 그것은 여러 라인이 같은 변수에 접근할 때의 동기화되지 않는 문제를 해결할 수 있다. 즉, 어떤 사건이 한 순간에 한 라인에만 접근할 수 있다는 것을 보장할 수 있다.조건 변수: 전역 변수 (코드 - 임계 구역, 자원 - 파일) 에 대한 다중 루트가 동시에 접근할 때 동기화되지 않는 문제를 해결할 수 있습니다.또한 어떤 자원이 한 시간에만 한 라인에 접근할 수 있도록 보장한다.그것은 일반적으로 서로 밀어내는 자물쇠와 협조하여 사용하는데, 사용 시 자물쇠를 빼앗지 않으면 자물쇠의 위치에 막힌다.자물쇠를 뺏으면 웨이트 상태로 들어갑니다. 이 때 자물쇠를 풀고 signal이나broadcast가 활성화되면 다시 자물쇠를 추가합니다.상호 배척 잠금 코드 위에 있습니다. 조건 변수 코드는 다음과 같습니다. 상호 배척 잠금의 사용법
Q4: 스레드 개인 데이터를 만드는 절차를 작성합니다.
루틴의 개인 데이터, 즉 키 다수치 기술을 만드는 절차는 다음과 같다. 1:'키'를 신청한다.pthread_key_t key; 2: 이 키 만들기;pthread_key_create(&key,NULL); 3: 이'키'를 라인 내부의'전역 변수'와 연결시킨다.pthread_setspecific(key,globvar); 4: 이 함수와 관련된 "key"값 얻기:pthreadkey_getspecific(key); 5: 키 제거: pthreadkey_delete(key); 코드는 다음과 같습니다: TSD - 원키 다수치 기술
Q5: 다중 프로세스 다중 루틴을 만드는 프로그램을 만듭니다. 4개의 하위 프로세스를 만듭니다. 각 하위 프로세스는 두 개의 루틴을 만듭니다. 프로세스와 루틴의 기능은 요구하지 않고 한 마디만 출력할 수 있습니다.코드는 다음과 같습니다.
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<pthread.h>
#include<stdlib.h>
void *func1()
{
printf("i am a thread,threadId:%u
",pthread_self());
}
int main(int argc,char *argv[])
{
int pid1,pid2,pid3;
pthread_t tid1,tid2,tid3,tid4,tid5,tid6,tid7,tid8;
pid1 = fork();
switch(pid1)
{
case 0:
pid2 = fork();
switch(pid2)
{
case 0:
printf("i am a process ,pid:%d
",getpid());
pthread_create(&tid1,NULL,func1,NULL);
pthread_create(&tid2,NULL,func1,NULL);
break;
default:
printf("i am a process ,pid:%d
",getpid());
pthread_create(&tid3,NULL,func1,NULL);
pthread_create(&tid4,NULL,func1,NULL);
// exit(0);
break;
}
default:
pid3 = fork();
switch(pid3)
{
case 0:
printf("i am a process ,pid:%d
",getpid());
pthread_create(&tid5,NULL,func1,NULL);
pthread_create(&tid6,NULL,func1,NULL);
break;
default:
printf("i am a process ,pid:%d
",getpid());
pthread_create(&tid7,NULL,func1,NULL);
pthread_create(&tid8,NULL,func1,NULL);
// exit(0);
break;
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 다중 스레드를 순차적으로 실행하는 몇 가지 방법 요약Java 다중 스레드를 순차적으로 실행하는 몇 가지 방법 요약 동료는 무심결에 이 문제를 제기하고 두 가지 방법을 직접 실천했다.물론 더 좋은 방법이 있을 거야. 방법 1 이런 방법은 비교적 흔히 볼 수 있는 해결 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.