Использование data.table
:
library(data.table)
idt <- as.data.table(iris)
idt[, .SD[11:(.N-10)], Species]
Та же логика в base R
:
do.call(
rbind,
lapply(
split(iris, iris[["Species"]]),
function(x) x[11:(nrow(x)-10), ]
)
)
Вы не должны заботиться, кто получает блокировку затем.
Принятие это похоже на Win32 затем ответ, состоит в том, что это мог бы быть FIFO, но это не могло бы (это быть чем-то еще). Например, поток более высокого приоритета должен быть первым; но потоки могут получить временное повышение или заглядывать их приоритету в зависимости от того, что они делали недавно.
Ваш вопрос подразумевает поиск поведения FIFO? Затем Вы могли бы хотеть попробовать этот код Jakub Sloup:
Монитор/блокировка, которые помнят порядок в C# для моделирования FIFO
Как уже упомянуто в других ответах нет никакого гарантируемого порядка, ожидая, потоки получат блокировку.
Как ответ на Ваш вопрос, все потоки получают monitor.pulse, который будет затем биться за то, кто получает блокировку затем.
Я полагаю, что люди в wintellect записали блог относительно того, как это поведение могло привести к несправедливой ситуации, но нет никакой справедливости вообще в мониторе.