CSV Dataset Config, when 'Recycle on EOF' is true and 'Stop thread on EOF' is false, will start reading the first line again when next thread requires new data and file reader gets to EOF. Each thread in the same JMeter machine will get a different row from CSV file. For distributed environment, if you want to read distinct values from CSV you'll need to have a CSV with distinct values for each JMeter slave, since each JMeter Slave will start reading from the first line of CSV file.
For example, if your CSV file has 15 rows then the 16th thread of a specific JMeter machine will read the CSV file's first line again. 17th thread will read the 2nd line, and so on. @JMeter Devs CSV Dataset Config could have some extra parameters such as 'Start from line', 'Step by' and 'Read random lines?' to help better config tests with this kind of requirement. CSVRead also could have a 'Reset?' or 'Cursor at line' and 'Step By before reading' parameters so it could be done using a function, mimicking the parameters suggested above.
