In this paper we present a Multithreaded programming methodology for Multi-core systems that utilizes Data- Flow concurrency. The programmer augments the program with macros that identify threads and their data dependencies. The macros are expanded into calls to the run-time support system that creates and maintains the dependency graph of the threads throughout the execution of the program. We demonstrate the programming methodology and discuss some of the issues and optimizations affecting the performance. A detailed evaluation is presented using two applications as case studies. The evaluation shows that the two applications scale well and outperform reported results of similar systems. Our results demonstrate that Data-Flow concurrency can be efficiently implemented as a Virtual Machine on Multi-core systems.