di libev, saya telah menginisialisasi pengamat io untuk menangkap peristiwa dan peristiwa ini menyebabkan nilai tertentu disimpan di beberapa cache. Saya memiliki pengamat pengatur waktu lain yang berjalan setiap 10 detik, membaca nilai cache. Dalam hal ini saya kira ada kondisi balapan. apakah saya perlu menggunakan kunci di dua pengamat libev yang berbeda atau libev yang menanganinya.
eg:
TCP_CACHE_TIMEOUT = g_hash_table_new_full(g_str_hash, g_int_equal, key_destroy_cb, value_destroy_timeoutcb);
zlog_info(_c,"TCP Server started at _port: %d",_port);
int fd =setup_tcp_socket(_port);
if(fd<0)
{
return NULL;
}
struct ev_loop *loop = EV_DEFAULT;
struct _sock_ev_serv server;
server.fd = fd;
ev_io_init(&server.io, event_server, server.fd, EV_READ);
ev_io_start(EV_A_ &server.io);
ev_timer_init (&timeout_watcher, timeout_idle_fd, 0, 10.);
ev_timer_again (loop,&timeout_watcher);
ev_loop(loop, 0);
di sini saya memiliki loop dan menginisialisasi io watcher untuk menerima acara server, dan timer watcher untuk mencari di cache setiap 10 detik. Dalam kasus seperti itu Apakah saya perlu menangani sendiri kondisi balapan atau dua pengamat io dan waktu berjalan diatur oleh libev?