C++程序 显示线程接口和内存一致性错误
C++通过使用“线程”头文件允许多线程。该程序作为一个线程,但为了增加程序执行时间/性能,我们可以使用线程来并发运行程序的某些部分。但它可能会导致内存一致性错误问题,可能无法给我们正确的输出。线程用于通过并行运行进程来改善应用程序的性能。
线程可以共享相同的资源或引用指针。两个或更多线程可能引用同一对象或共享某些常见资源,并尝试独立更新或更改共享资源数据,这可能会导致数据不一致。
示例: 在下面的C++程序中,使用两个线程使用相同的函数。首先应该为线程1运行,然后为线程2运行。但是为了显示共享相同资源/函数的内存一致性,输出不一致。
// C ++程序显示
//内存一致性
#include
#include
using namespace std;
class thread_obj {
public:
void operator()(int x)
{
for (int i = 0; i < 50; i++)
{
cout << "Thread " << x << "\n";
}
}
};
//Driver code
int main()
{
// thread 1
thread th1(thread_obj(), 1);
// thread 2
thread th2(thread_obj(), 2);
// wait for thread1 to join
th1.join();
// wait for thread2 to join
th2.join();
return 0;
}
输出-您可以看到输出的不一致性(它是机器相关的)
示例2: 在下面的C++程序中,将尝试从不同线程中访问相同的值,因为可以看到内存一致性错误,因为两个线程将同时运行。
// C ++程序显示内存
//一致性错误
#include
#include
using namespace std;
int x = 100;
void thread_function()
{
for(int i = 0; i < 50; i++)
{
x--;
cout << "Thread 1 " <<
x << "\n";
}
}
//Driver code
int main()
{
std::thread t(&thread;_function);
for(int i = 0;i < 100; i++)
{
x++;
cout << "main thread " <<
x << "\n";
}
return 0;
}
输出-您可以看到输出的不一致性(它是机器相关的)