mirror of
https://github.com/mutouyun/cpp-ipc.git
synced 2025-12-06 16:56:45 +08:00
fixed a stupid bug in benchmark
This commit is contained in:
parent
f930dfe34d
commit
774a3c9af7
@ -9,6 +9,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/inotify.h>
|
#include <sys/inotify.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@ -72,14 +73,27 @@ struct mqueue_reader {
|
|||||||
auto shm = ipc::shared_memory("shm-mqueue_reader", sizeof(flag_t));
|
auto shm = ipc::shared_memory("shm-mqueue_reader", sizeof(flag_t));
|
||||||
auto flag = shm.as<flag_t>();
|
auto flag = shm.as<flag_t>();
|
||||||
printf("mqueue_reader start.\n");
|
printf("mqueue_reader start.\n");
|
||||||
mqd_t wfd = mq_open("/mqueue-wfd", O_RDONLY);
|
mq_unlink("/mqueue-wfd");
|
||||||
mqd_t rfd = mq_open("/mqueue-rfd", O_WRONLY);
|
mq_unlink("/mqueue-rfd");
|
||||||
|
struct mq_attr attr = {0, 10, 1, 0};
|
||||||
|
mqd_t wfd = mq_open("/mqueue-wfd", O_CREAT | O_RDONLY, 0666, &attr);
|
||||||
|
mqd_t rfd = mq_open("/mqueue-rfd", O_CREAT | O_WRONLY, 0666, &attr);
|
||||||
|
if (wfd < 0 || rfd < 0) {
|
||||||
|
printf("mq_open error. errno = %d\n", errno);
|
||||||
|
return;
|
||||||
|
}
|
||||||
while (!flag->load(std::memory_order_relaxed)) {
|
while (!flag->load(std::memory_order_relaxed)) {
|
||||||
char n {};
|
char n {};
|
||||||
// read
|
// read
|
||||||
mq_receive(wfd, &n, sizeof(n), nullptr);
|
if (mq_receive(wfd, &n, sizeof(n), nullptr) < 0) {
|
||||||
|
printf("mq_receive error. errno = %d\n", errno);
|
||||||
|
return;
|
||||||
|
}
|
||||||
// write
|
// write
|
||||||
mq_send(rfd, &n, sizeof(n), 0);
|
if (mq_send(rfd, &n, sizeof(n), 0) < 0) {
|
||||||
|
printf("mq_send error. errno = %d\n", errno);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
printf("mqueue_reader exit.\n");
|
printf("mqueue_reader exit.\n");
|
||||||
mq_close(wfd);
|
mq_close(wfd);
|
||||||
@ -91,9 +105,16 @@ struct mqueue_reader {
|
|||||||
auto shm = ipc::shared_memory("shm-mqueue_reader", sizeof(flag_t));
|
auto shm = ipc::shared_memory("shm-mqueue_reader", sizeof(flag_t));
|
||||||
shm.as<flag_t>()->store(true, std::memory_order_seq_cst);
|
shm.as<flag_t>()->store(true, std::memory_order_seq_cst);
|
||||||
{
|
{
|
||||||
mqd_t wfd = mq_open("/mqueue-wfd", O_WRONLY);
|
mqd_t wfd = mq_open("/mqueue-wfd", O_EXCL | O_WRONLY, 0666, NULL);
|
||||||
|
if (wfd < 0) {
|
||||||
|
printf("mq_open error. errno = %d\n", errno);
|
||||||
|
return;
|
||||||
|
}
|
||||||
char n {};
|
char n {};
|
||||||
mq_send(wfd, &n, sizeof(n), 0);
|
if (mq_send(wfd, &n, sizeof(n), 0) < 0) {
|
||||||
|
printf("mq_send error. errno = %d\n", errno);
|
||||||
|
return;
|
||||||
|
}
|
||||||
mq_close(wfd);
|
mq_close(wfd);
|
||||||
}
|
}
|
||||||
test::join_subproc(pid_);
|
test::join_subproc(pid_);
|
||||||
@ -314,14 +335,24 @@ void ipc_eventfd_rtt(benchmark::State &state) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ipc_mqueue_rtt(benchmark::State &state) {
|
void ipc_mqueue_rtt(benchmark::State &state) {
|
||||||
mqd_t wfd = mq_open("/mqueue-wfd", O_WRONLY);
|
mqd_t wfd = mq_open("/mqueue-wfd", O_EXCL | O_WRONLY, 0666, NULL);
|
||||||
mqd_t rfd = mq_open("/mqueue-rfd", O_RDONLY);
|
mqd_t rfd = mq_open("/mqueue-rfd", O_EXCL | O_RDONLY, 0666, NULL);
|
||||||
|
if (wfd < 0 || rfd < 0) {
|
||||||
|
printf("mq_open error. errno = %d\n", errno);
|
||||||
|
return;
|
||||||
|
}
|
||||||
for (auto _ : state) {
|
for (auto _ : state) {
|
||||||
char n {};
|
char n {};
|
||||||
// write
|
// write
|
||||||
mq_send(wfd, &n, sizeof(n), 0);
|
if (mq_send(wfd, &n, sizeof(n), 0) < 0) {
|
||||||
|
printf("mq_send error. errno = %d\n", errno);
|
||||||
|
return;
|
||||||
|
}
|
||||||
// read
|
// read
|
||||||
mq_receive(rfd, &n, sizeof(n), nullptr);
|
if (mq_receive(rfd, &n, sizeof(n), nullptr) < 0) {
|
||||||
|
printf("mq_receive error. errno = %d\n", errno);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
mq_close(wfd);
|
mq_close(wfd);
|
||||||
mq_close(rfd);
|
mq_close(rfd);
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(LIBIMP_OS_LINUX)
|
||||||
LIBIPC_NAMESPACE_BEG_
|
LIBIPC_NAMESPACE_BEG_
|
||||||
|
|
||||||
/// \brief C style event access interface implementation.
|
/// \brief C style event access interface implementation.
|
||||||
@ -23,3 +24,4 @@ std::string evt_name(evt_t evt) noexcept {
|
|||||||
/// \brief The event object.
|
/// \brief The event object.
|
||||||
|
|
||||||
LIBIPC_NAMESPACE_END_
|
LIBIPC_NAMESPACE_END_
|
||||||
|
#endif
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include <libipc/event.h>
|
#include <libipc/event.h>
|
||||||
|
|
||||||
|
#if !defined(LIBIMP_OS_LINUX)
|
||||||
TEST(event, open_close) {
|
TEST(event, open_close) {
|
||||||
auto evt = ipc::evt_open("test");
|
auto evt = ipc::evt_open("test");
|
||||||
ASSERT_TRUE(evt);
|
ASSERT_TRUE(evt);
|
||||||
@ -97,3 +98,4 @@ TEST(event, unicast_multi) {
|
|||||||
ASSERT_TRUE(ipc::evt_close(*evt3));
|
ASSERT_TRUE(ipc::evt_close(*evt3));
|
||||||
ASSERT_EQ(success, 1);
|
ASSERT_EQ(success, 1);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user