This work proposes to investigate the use of Software Transactional Memory (STM) as a programming alternative for parallel architectures with shared memory. First, we study the concept of parallel programming and its main characteristics. Then we describe the STM approach for parallel programming, as well its application in the context of functional programming languages, in special Haskell. As a case study to illustrate the advantages of using STM, we show the implementation in Haskell of the classic problem of synchronization, the dining philosophers problem. Finally, aiming to demonstrate the simplicity and elegance of codes with STM in Haskell, it compares this implementation with another implementation of the same problem using the mec...