In the context of processing data lists in parallel in a multicore platform, various threads share a workload, each using a list to get and insert the data items to be processed; and when a list becomes empty, the owner thread steals data items from another list — thus balancing the workload according to the processing capacity of each thread and transparently to the programmer.