Real-time systems where applications with timing requirements coexist with applications without timing constraints are increasingly common. Furthermore, the processors used in desktops, smart phones or embedded devices are mostly multi-core, allowing the execution of applications in parallel. This article presents a set of non-blocking synchronization mechanisms to share data between real-time and non-real-time applications executing in different cores of a shared memory multi-core system. Four typical producer/consumer scenarios have been explored; a) shared data object with real-time reader, b) shared data object with real-time writer, c) shared queue with real-time writer, and d) shared queue with real-time reader. For these scenarios we have developed different non-blocking protocols where the execution of the real-time application is always prioritized over the execution of the non-real-time part. In this way, the real-time applications never have to repeat their operations and, consequently, their execution times are bounded. Furthermore, to reduce the overhead caused by the copies of the information used in the non-blocking algorithms, we have imposed the limitation of a single real-time reader or a single real-time writer in the algorithms developed. Finally, we have evaluated the response times of the developed protocols on a multi-core device with the Android operating system.INDEX TERMS Android, multi-core, non-blocking synchronization, real-time, wait-free.