Idea: Filter the options by the word synchronization.
Safe concurrent access needs a mechanism that lets processes wait and signal around a critical section. A semaphore does exactly this through two atomic operations:
\[wait(S){:}\ S \leftarrow S - 1, \qquad signal(S){:}\ S \leftarrow S + 1\]
The counter blocks extra processes until a slot frees up, guaranteeing mutual exclusion. Buffering, paging, and virtual memory are all memory or data-flow techniques with no locking role.
\[\boxed{\text{Semaphore}}\]