读书人

为啥这段代码中的函数换成引用就是错

发布时间: 2013-09-06 10:17:17 作者: rapoo

为什么这段代码中的函数,换成引用就是错的??
好久没写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;
}



引用:错误的代码

#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


[解决办法]
引用是别名。
[解决办法]


//这些地方你又没有传应用进出 引用是别人,你这里传的还只是值,
//拷贝的一份值而已!
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);

读书人网 >C++

热点推荐