为什么这段代码中的函数,换成引用就是错的??
好久没写c++代码了,都快忘了,麻烦各位帮我看看,为什么下面这段代码换成引用是错的?
指针:正确的代码
#include <iostream>
#include <mutex>
#include <condition_variable>
#include <thread>
std::mutex mtx;
std::condition_variable_any cv1;
std::condition_variable_any cv2;
void read_arr(int *p,int *Aready,int *Bready)
{
mtx.lock();
while((*Aready == 0) || (*Bready==0))
cv1.wait(mtx);
for(int i = 0;i<6;++i)
std::cout<<*(p+i)<<std::endl;
mtx.unlock();
}
void write_arr(int *p,int number,int *ready)
{
mtx.lock();
*p = number;
*ready = 1;
cv1.notify_one();
mtx.unlock();
}
int main()
{
int arr[6] = {0};
int thAReady(0),thBReady(0);
std::thread thC(read_arr,arr,&thAReady,&thBReady);
std::thread thA(write_arr,arr+2,4,&thAReady);
std::thread thB(write_arr,arr+4,35,&thBReady);
thB.join();
thC.join();
thA.join();
system("pause");
return 0;
}
指针 c++ thread
#include <iostream>
#include <mutex>
#include <condition_variable>
#include <thread>
std::mutex mtx;
std::condition_variable_any cv1;
std::condition_variable_any cv2;
void read_arr(int *p,int &Aready,int &Bready)
{
mtx.lock();
while((Aready == 0) || (Bready==0))
cv1.wait(mtx);
for(int i = 0;i<6;++i)
std::cout<<*(p+i)<<std::endl;
mtx.unlock();
}
void write_arr(int *p,int number,int &ready)
{
mtx.lock();
*p = number;
ready = 1;
cv1.notify_one();
mtx.unlock();
}
int main()
{
int arr[6] = {0};
int thAReady(0),thBReady(0);
std::thread thC(read_arr,arr,thAReady,thBReady);
std::thread thA(write_arr,arr+2,4,thAReady);
std::thread thB(write_arr,arr+4,35,thBReady);
thB.join();
thC.join();
thA.join();
system("pause");
return 0;
}
[解决办法]
引用是别名。
[解决办法]
//这些地方你又没有传应用进出 引用是别人,你这里传的还只是值,
//拷贝的一份值而已!
std::thread thC(read_arr,arr,thAReady,thBReady);
std::thread thA(write_arr,arr+2,4,thAReady);
std::thread thB(write_arr,arr+4,35,thBReady);