You can, but it requires special architecture for the application. The cpuset can be used to disable scheduler use of the core and then you can pin application threads to cores, single thread per core.
Only then it makes sense tu use spin locks.
Only then it makes sense tu use spin locks.
In general you should expect userspace code to be scheduled out at any time and use locking primitives that the kernel knows about.
Even if your thread won't be scheduled off the core I don't know if you might still have irqs stealing time during the critical section.