이것은 무한 루프를 사용하여 무언가를 입력하고 대기열에 저장하기를 기다리는 함수 start()가있는 간단한 프로그램입니다. start()는 별도의 스레드에서 실행됩니다. 사용자가 몇 가지 값을 입력하면 대기열의 크기는 메인에서 0으로 유지됩니다. 대기열은 어떻게 동기화 될 수 있습니까?
코드 : source.cpp는
두 스레드 간의 큐 동기화
#include <iostream>
#include "kl.h"
using namespace std;
int main()
{
std::thread t1(start);
while (1)
{
if (q.size() > 0)
{
std::cout << "never gets inside this if\n";
std::string first = q.front();
q.pop();
}
}
t1.join();
}
코드 : kl.h는
#include <queue>
#include <iostream>
#include <string>
void start();
static std::queue<std::string> q;
코드 : kl.cpp는
#include "kl.h"
using namespace std;
void start()
{
char i;
string str;
while (1)
{
for (i = 0; i <= 1000; i++)
{
//other stuff and str input
q.push(str);
}
}
}
추가 전체 코드 – user6275035
당신이 헤더 파일의 큐에 '정적'을 사용하기 때문에, 당신은 실제로 2 개의 다른 큐, 각각의 CPP의 하나가 파일. 그것이 메인에있는 것이 항상 비어있는 이유입니다. – tony
@tony 정적 제거시 링커 오류를 보여줍니다. – user6275035