Question: The title is pretty self explanatory, cause when is the actual "cancelation point"? POSIX requires that `read` is a cancelation point but is that when the thread first calls `read`, or once it's done? When exactly does POSIX require the thread to be canceled?

Answer: 
The cancellation point is at any time *during* the call to `read()`. From [the spec](http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_09_05_02):

> 
> Cancellation points shall occur when a thread is executing the following functions: [....] `read()` [....]
> 
> 
> 

So, to answer your titular question, yes.
On Linux, "man 7 pthreads" contains this:

> 
> POSIX.1 specifies that certain functions must, and certain other functions may, be cancellation
>  points. If a thread is cancelable, its cancelability type is deferred, and a cancellation request
>  is pending for the thread, then the thread is canceled when it calls a function that is a cancella‐
>  tion point.
> 
> 
> 

I read this to mean it is cancel-able when "read is called", not "during a read"...

However, if that is a concern for you and you don't want a specific thread to be cancelled in a critical section of code, you could call "pthread\_setcancelstate() with "PTHREAD\_CANCEL\_DISABLE" and after the critical section you could call it again, this time with "PTHREAD\_CANCEL\_ENABLE".