Bueno iba a meter una santa parrafada, pero he llegado a la conclusión de QUE, lo mejor es usar un solo thread, ya que si voy a tener 2 y voy a estar llamando al uno cada X tiempo luego al otro.. mutex.. lo mejor hago uno y ya esta, porque si el mutex lo que va a acabar haciendo es bloquear un thread, tengo lo mismo que si trabajo con un solo thread.
Escuchare paquetes de la red, cada X tiempo escaneare la red, y cada Z tiempo mandaré arp spoofing, todo en un thread, ya que con 2 threads y mutex, me da errores, y voy a tener lo mismo, pues haría el lock() para mandar arp spoofing a los hosts, apenas tarda tiempo, para eso lo hago en un thread y me ahorro mutex y demás.
Aunque el tiempo que tardo en spoofear no estaría recogiendo paquetes... pero si hago lock() para spoofear tampoco lo estaría haciendo luego ¿porque no solo usar un thread? (Ya que en ambos casos usaria la lista de usuarios y el vector de hosts, estaría compartiendo la variable.
Edito: O mejor hacer el spoofing y el escaneo de host (donde uso la variable) en una funcion, y la otra simplemente escucha y redirige el tráfico. Podría ir. No necesitaría mutex.
Saludos.