안녕하세요 저는 C++에서 멀티 스레딩을 처음 사용합니다. 다른 스레드에서 함수를 실행하기 위해 C++ 11에서 사용할 수있는 스레드 클래스를 사용하고 있지만 어떻게 든 함수에서 가져 오는 출력은 매우 어색합니다. 이는 서로 다른 스레드가 동일한 변수를 동시에 실행하여 충돌을 일으킬 수 있기 때문일 수 있습니다. 올바른 결과를 얻을 수 있도록 코드를 수정해야하는 방법을 제안하십시오. 내가하려는 일의 샘플 코드를 게시하고 있습니다. 이것은 원래 코드가 아니지만 원본 코드가 너무 길기 때문에 원래 코드의 흐름을 보여 주지만 문제는 두 경우 모두 동일합니다.다른 스레드에서 실행되는 함수가 이상한 결과를 출력합니다.
#include<iostream>
#include<thread>
using namespace std;
typedef struct {
int thread_id;
char *message;
}threadData;
int display(threadData *tData){
threadData *my_data;
my_data = (threadData *) tData;
cout << "Thread ID: " << my_data -> thread_id << endl;
cout << "Message: " << my_data -> message << endl;
return 0;
}
int main(){
threadData *data;
data = (threadData *)malloc(sizeof(threadData));
data->thread_id = 12;
data->message = "This is the message";
for (int i = 0; i<10; i++)
{
std::thread t1(display, data);
t1.detach();
}
return 0;
}
출력 : 처음 실행되는 guaruntee하지 않는 스레드로
Thread ID: 12
Message: This is the messageThread ID:
12
Message: This is the message
Thread ID: 12
Message: This is the message
Thread ID: 12
Message: This is the message
Thread ID: 12
Message: This is the message
잠금 및 메모리 모델에 대해 읽고 싶습니다. 진지하게 : 이것은 매우 광범위한 주제입니다. 그리고 당신은 "예를 들어"가면 안됩니다. 그러나 "개념에 의해". 의미 : 해당 주제에 대한 연구를 수행하십시오. 예를 들어 "C++ thread locking example"에 대한 그물 검색. 내 말은 : 예, 사람들이 당신에게 물건을 설명 할 때 좋습니다. 하지만이 자료는 수천 번 기록됩니다. 이 질문을 작성하는 것보다 인터넷을 직접 검색하는 데 ** 적은 시간 **이 걸릴 것입니다. 주의 사항 : 이것은 여전히 유효한 질문이므로 downvote 또는 close 투표는 없지만 여전히 ... – GhostCat
실제로 잠금 및 일반 스레드 개념에 대해 읽으십시오. 또한,'malloc'과'C++ '? 'typedef 구조체'? C++을 약간 새로 꾸밀 수도 있습니다. –