Kernel synchronization methods are required to prevent race conditions when shared resources are accessed concurrently by multiple threads. The Linux kernel supports various synchronization primitives including atomic operations, spin locks, semaphores, mutexes, completion variables, and the big kernel lock. Each method has advantages and limitations depending on whether the resource can be accessed in interrupt context or while sleeping. Locking schemes must prevent deadlocks and ensure scalability to work effectively in multi-processor and preemptible kernel environments.