首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-09-06 
为什么这段代码中的函数,换成引用就是错的??好久没写c++代码了,都快忘了,麻烦各位帮我看看,为什么下面这段

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

热点排行