Sirve para evitar que 2 threads ejecuten una misma parte de código a la vez. Si 2 threads se meten en los métodos de tu lista a la vez, puede acabar dando problemas. No digo que esté ocurriendo, pero tenlo en cuenta. Threads o async() sin mutex u otro formato de control, es muy peligroso para la integridad del ejecutable.
Cuando uses async() o threads, no olvides manejar variables con mutec u otro tipo de controlador. Especialmente si andas con clases o estructuras. Y más especialmente si andas con punteros.
Por parte de C, () lo interpreta <que yo sepa> igual en ambos casos. No te lo tomes como un fallo, sino como una ayuda al hacer funciones de callback, pues te ayuda a evitar andar poniendo (*)