На самом деле это неправильный вариант использования epoll.
Вы не должны полностью разделять epoll fd между потоками. В противном случае у вас есть возможность, что один поток прочитает часть входящих данных на одном и том же диске, а другой поток - на том же самом, без какого-либо способа узнать, какая часть данных была перед другой.
Просто вызовите epoll_create в каждом потоке, который вызывает epoll_wait. В противном случае ввод / вывод нарушен.