Inserts data into this using func to determine the new position.
This function requires that the this is sorted before pushing on new elements, see sort.
This function will lock this before it sorts the queue and unlock it when it is finished.
For an example of func see sort.
| this | |
| data |
the |
| func |
the CompareDataFunc is used to sort this |
| user_data |
user data passed to |