CPP のスレッド ライブラリと Intel TBB Library for MultiCore を使用した 1 つのアルゴリズムを実装しています。スレッドの助けを借りて関数を呼び出しているときに、完全に実行されることもあれば、実行時に例外が発生することもあります。原因を見つけようとしています。が見つかりませんでした。例外が発生しているコード スニペットの例を見つけてください。
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <tbb/pipeline.h>
#include <tbb/atomic.h>
#include <tbb/concurrent_queue.h>
#include <tbb/compat/thread>
#include <tbb/tbbmalloc_proxy.h>
using namespace std;
using namespace tbb;
#define pi 3.141593
#define FILTER_LEN 265
class MyBuffer
{
public:
double *acc;
double *buffer;
int start,end;
MyBuffer()
{
start=0;
end=0;
buffer=new double[150264];
acc=new double[150000];
fill_n(buffer,150264,0);
}
~MyBuffer()
{
delete[] buffer;
delete[] acc;
}
int startnumber()
{
return start;
}
int endnumber()
{
return end;
}
};
typedef concurrent_queue<MyBuffer> QueueMyBufferType;
QueueMyBufferType chunk_queue;
atomic<bool> stop_flag;
// input function that will be running by thread to generate sinewave
void input_function()
{
stop_flag = false;
cout<<"thread reached to call input function " <<endl;
ofstream o("testing sinewave.csv");
int counter=0;
while(counter<150000)
{
cout<<"value of counter is \t" <<counter << endl;
//MyBuffer *b=new MyBuffer;
MyBuffer b;
b.start=(FILTER_LEN-1+(counter));
b.end=(25264+(counter));
cout<<"value of b.start is and b.end is "<<b.start<<"\t" <<b.end<<endl;
for(int i =b.startnumber(); i <b.endnumber(); i++)
{
b.buffer[i] = sin(700 * (2 * pi) * (i / 5000.0));
o<<b.buffer[i]<<endl;
}
chunk_queue.push(b);
cout<<"object pushed in queue and value of j is \t" <<counter <<endl;
counter+=25000;
}
stop_flag = true;
cout<<"all data is perfectly generated" <<endl;
}
int main()
{
thread input_thread(input_function);
while(!stop_flag)
{
//cout<<"waiting for thread " << endl;
}
cout << "\n All Data is processed \n\n" << endl;
return 0;
}
このコードはアプリケーションの一部であり、正弦波の生成に役立ちます。間違っている場所を見つけるのを手伝ってください。