¿Por qué se utilizan estas funciones, flockfile () (o ftrylockfile ()) y funlockfile ()?

La función funlockfile () renunciará a la propiedad otorgada al subproceso. El comportamiento no está definido si un subproceso que no sea el propietario actual llama a la función funlockfile ().
Las funciones se comportarán como si hubiera un recuento de bloqueo asociado con cada objeto ( FILE * ). Este recuento se inicializa implícitamente a cero cuando se crea el objeto ( FILE * ). El objeto ( ARCHIVO * ) se desbloquea cuando el recuento es cero. Cuando el recuento es positivo, un solo subproceso posee el objeto ( FILE * ). Cuando se llama a la función flockfile (), si el recuento es cero o si el recuento es positivo y la persona que llama posee el objeto ( FILE * ), el recuento se incrementará. De lo contrario, el hilo de llamada se suspenderá, esperando que el recuento vuelva a cero. Cada llamada a funlockfile () disminuirá el recuento. Esto permite que las llamadas coincidentes a flockfile () (o llamadas exitosas a ftrylockfile ()) y funlockfile () se aniden .
Todas las funciones que hacen referencia a objetos ( FILE * ) se comportarán como si usaran flockfile () y funlockfile () internamente para obtener la propiedad de estos objetos ( FILE * ).

RTFM …
flockfile (3) – página del manual de Linux