Reputation:
I know this is game design related, but I have read the StackOverflow FAQ and it states software algorithm questions can be asked here. If this is better off in game design then I hope someone can help me move it, thanks!
I am designing a multi-threaded procedural dungeon generator. However, I am wondering what kinds of problems I am likely to run into-- I haven't been able to find many algorithms that clearly showed multi-threaded in them.
I have three distinct objects which must be created. A 'World' which houses multiple 'Rooms' and each room will house potential 'Objects.'
The current algorithm works like this:
Step 1: Generate World
Step 2: Generate Rooms and Objects concurrently
The World houses a room list, and an 'available objects list.' The Room creation method will generate rooms and add them to the World's room list.-- the Object creation procedure will not communicate with the Room procedure in any way. Rather, the Object creation procedure will pick random rooms from the World's room list and generate random objects in the room.
The only problem I see with this is-- if the Object creation procedure finishes pre-maturely. In other words only some of the rooms in the room list will have objects created in them because the room creation procedure finished later than the object creation procedure.
Are there more problems, and does anyone have any advice or experience with developing such algorithms?
Upvotes: 2
Views: 385
Reputation: 10571
Firstly, the problem mentioned by you isn't a real one, because you should simply work with 3 steps:
In that order, it is ensured that all rooms are present. And you don't gain much from keeping 2+3 together in terms of performance anyways.
However, the main problem, as typical with concurrency, is when you join your results together. If your rooms are kept in a list, then appending to that list needs to be synchronized, which slows down your processing. A much more involved problem occurs, once you start to actually create rooms in a world-space and have to ensure that rooms generated in parallel do not occupy the same space (same for objects inside a room).
Upvotes: 2