we use thread instead fcntl