C++ _Mtx#u t变量失败,我如何声明它以避免';t引用null?
变量_Mtx_t失败并引用null。我是怎么申报的 为了确保他的所有功能不失效C++ _Mtx#u t变量失败,我如何声明它以避免';t引用null?,c++,C++,变量_Mtx_t失败并引用null。我是怎么申报的 为了确保他的所有功能不失效 #include <iostream> #include <stdio.h> #include <thread> #include <conio.h> #include <mutex> #include <signal.h> #include <condition_variable> #define NUM_READERS 6 #d
#include <iostream>
#include <stdio.h>
#include <thread>
#include <conio.h>
#include <mutex>
#include <signal.h>
#include <condition_variable>
#define NUM_READERS 6
#define NUM_READS 5
#define NUM_WRITERS 6
#define NUM_WRITES 5
using namespace std;
_Cnd_t read_phase, write_phase;
int resource_counter = 0;
_Mtx_t counter_mutex = (_Mtx_t)("0x01", "0x02", "0x04", "0x100");
int WaitReaders = 0,Read = 0;
void writer() {
int i = 0, numReaders = 0;
for (i = 0; i < NUM_WRITES; i++) {
_Mtx_trylock(counter_mutex); {
while (Read != 0) {
_Cnd_wait(write_phase, counter_mutex);
}
Read = -1;
numReaders = Read;
}
_Mtx_unlock(counter_mutex);
printf( " writing %u* [readers: %2d]\n", ++resource_counter, numReaders);
_Mtx_lock(counter_mutex); {
Read = 0;
if (WaitReaders > 0)
_Cnd_broadcast(read_phase);
else
_Cnd_signal(write_phase);
}
_Mtx_unlock(counter_mutex);
counter_mutex;
}
}
void Readers() {
int i = 0, numReaders = 0;
for (i = 0; i < NUM_READS; i++) {
_Mtx_lock(counter_mutex);
{
while (resource_counter == 1)
{
_Cnd_wait(read_phase, counter_mutex);
}
WaitReaders--;
numReaders = ++Read;
}
_Mtx_unlock(counter_mutex);
}
printf( " reading %u [readers: %2d]\n", resource_counter, numReaders);
_Mtx_lock(counter_mutex); {
Read--;
if (Read == 0)
_Cnd_signal(read_phase);
}
_Mtx_unlock(counter_mutex);
}
int main()
{
int i;
int readerNum[NUM_READERS];
int writerNum[NUM_WRITERS];
thread readerThreadIDs[NUM_READERS];
thread writerThreadIDs[NUM_WRITERS];
for (i = 0; i < NUM_READERS; i++) {
readerNum[i] = i;
readerThreadIDs[i] = thread(Readers);
writerNum[i] = i;
writerThreadIDs[i] = thread(writer);
}
for (i = 0; i < NUM_READERS; i++) {
readerThreadIDs[i].join();
writerThreadIDs[i].join();
}
return 0;
}
\u Cnd\t
<代码>\u Mtx\u t?这些是C++实现的内部类型,它们不打算由您使用。
您应该使用std::mutex
和std::condition\u变量
。在你的C++书籍中查一下。