ใน libev ฉันได้เริ่มต้น io watcher เพื่อจับเหตุการณ์และเหตุการณ์นี้ทำให้เก็บค่าบางอย่างไว้ในแคชบางตัว ฉันมีตัวจับเวลาอีกอันที่ทำงานทุกๆ 10 วินาที อ่านค่าแคช ในกรณีเช่นนี้ ฉันคิดว่ามีสภาพการแข่งขัน ฉันต้องใช้การล็อคใน libev watcher สองตัวที่แตกต่างกันหรือ libev จัดการมัน
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);
ที่นี่ฉันมีการวนซ้ำและเริ่มต้น io watcher เพื่อยอมรับเหตุการณ์เซิร์ฟเวอร์ และตัวจับเวลาเพื่อดูในแคชทุกๆ 10 วินาที ในกรณีเช่นนี้ ฉันจำเป็นต้องจัดการสภาพการแข่งขันด้วยตัวเองหรือผู้เฝ้าดู io สองคนและเวลารันไทม์เมอร์ได้รับการจัดการโดย libev หรือไม่