gpt4 book ai didi

c++ - 等待线程直到另一个线程结束 C++ linux OS

转载 作者:太空狗 更新时间:2023-10-29 12:31:56 25 4
gpt4 key购买 nike

我的项目中有三个用 C++ 编写的函数,在同一个 .cpp 文件中,我有两个 .h 文件。现在,我有三个相应的线程,第二个线程从第一个线程获取输出,最后一个线程等待第二个线程结束它的操作。注意线程处于“永远循环”中,即 while(1 ){..}

//source.cpp 看起来像这样:

#include <iostream>
#include "source.h"
#include "glob_variables.h"
#include "armadillo"
#include <vector>
using namespace arma;
using namespace std;

void source::first_function(int size)
{
for(int i=0;i<size;i++)
{
container.push_back(i);//container is global variable vector of type int declared in glob_variables.h
}
}
//~~~~~~~~~~~~~~~~~~~~~~
void source::second_function()
{
//sleep until the first function fills the the vector to set set its size to matrix.n_rows
matrix.set_size(container.size(),33);
for(int i=0;i<container.size();i++)
{
for(int j=0;j<50;j++)
{
matrix(i,j)=i+j;//matrix is also a global variable in glob_variables.h
}
}
}
//~~~~~~~~~~~~~~~~~~~~~~
void source::third_function()
{
//sleep untill the second function fills the matrix, then print
cout<<matrix;//print out the matrix
}

//源代码.h

#include "glob_variables.h"
#include "armadillo"
#include <vector>
using namespace arma;
using namespace std;
class source
{
public:
void first_function(int size);
void second_function();
void third_function();
};

//glob_variables.h

#include "armadillo"
#include <vector>
using namespace arma;
using namespace std;

extern mat matrix;
extern vector<int> container;

//主程序.cpp

    #include <iostream>
#include <stdio.h>
#include <pthread.h>
#include "source.h"
#include "glob_variables.h"
#include "armadillo"
#include <vector>
using namespace arma;
using namespace std;

//thread functions
void* first_reader(void* id1)
{
source mysource;
while(1)
{
mysource.first_function(80);
}
}

void* second_reader(void* id2)
{
source mysource;
while(1)
{
mysource.second_function();
}
}

void* third_reader(void* id3)
{
source mysource;
while(1)
{
mysource.third_function();
}
}

int main()
{
pthread_t first;
pthread_t second;
pthread_t third;

int hndl_first;
int hndl_second;
int hndl_third;

hndl_first = pthread_create(&first, NULL, first_reader, NULL);
hndl_second= pthread_create(&second, NULL, second_thread, NULL);
hndl_third;= pthread_create(&third, NULL,third_thread, NULL);

pthread_exit(NULL);
return 0;
}

我有什么技巧可以做到这一点,或者任何简单的例子。谢谢。

最佳答案

来自documentation

attributes

.n_rows           number of rows; present in Mat, Col, Row, Cube, field and SpMat
.n_cols number of columns; present in Mat, Col, Row, Cube, field and SpMat
.n_elem total number of elements; present in Mat, Col, Row, Cube, field and SpMat
.n_slices number of slices; present in Cube
.n_nonzero number of non-zero elements; present in SpMat

Member variables which are read-only; to change the size, use .set_size(), .copy_size(), .zeros(), .ones(), or .reset()

所以,照他们说的去做,使用

matrix.set_size(container.size(),50);

关于c++ - 等待线程直到另一个线程结束 C++ linux OS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24095705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com