Обновить
7
0
Роман Сергеев@Cupper

Пользователь

Отправить сообщение
Поглядите в статью Практика работы с сигналами, в особенности в комментарии. На обработчики сигнала наложены жесточайшие ограничения :)

НО! В случае полного краха приложения, уж лучше что то (шанс что весь ваш обработчик отработаете и вы получите репорт) чем ничего (вы даже не пытаетесь его отправит, потому что следуете всем правилам написания обработчика сигналов)
еще раз, вы не можете сделать

— если счетчик==0 => удаляем

не залочив весь список. Удаление объекта сказывается как минимум на предшествующем и последующем объекте. А если это ассоциативный контейнер то может и на всем списке.

А вот проблема, которая действительно есть в статье: это то, что объект может быть использован двумя потоками одновременно. Как она решается?
read-write блокировки. И ни как иначе.
интересно а как вы ее использовать собрались? Список в самом простом его представлении это структура вида
{
next*
prev*
data
}

когда вы удаляете элемент вам нужно изменить не один а три элемента. next у предыдущего должен указывать на следующий за удаляемым. prev следующего за удаляемым должен указывать на предыдущий перед удаляемым. И только потом уже можно удалять элемент.
Тут есть два вариант, либо лочить всю очередь. Либо, может быть, возможно придумать, как лочить только три объекта удаляемые, и те что слева справа от него. Но это крайне сложно, так как делать это по сути нужно атомарно. Но так же это будет офигенски многопоточная очередь.
Интересный подход с мютексом на весь список и счетчиком в каждом объекте, жаль что сугубо заточен под задачу где есть поток удалятор, и 1-N поток юзателей.

И я не очень понял и как получить (использовать) объект? получается мне нужно перед использованием объекта сделать что то вроде iterator->lock(), iterator->unlock()?

В принципе было бы логично и итераторы тогда для такой очереди сделать которые как смарт поинтеры работали бы. Но в этом случае нельзя полагаться на то что объект используется минуту. Тогда встает вопрос, а как это делать?
Спасибо за ответы.
1. А не по своему ?) Если таковые были, то какие причины? Не справляется нагрузкой? Валынит? Замкнут в себе не общается с окружающими ?)
Не могли бы вы мне ответить на пару вопросов, уж больно интересно мне

1. Какая у вас текучесть кадров? Как часто берете кого то на работу, как часто от вас уходят?
2. Что бы к вам попасть человек уже должен быть сформировавшимся специалистом в вашей (или около лежащей) сфере?
3. Кого вы бы приняли (отдали предпочтение) из этих двух кандидатов: гик до мозга костей, отличный специалист, выглядит невзрачно, говорит со стеснением, смеется только над техническими шутками за гранью обычного понимания или молодой еще не сложившийся специалист, возможно со стажем в год — два в профильное(смежной) сфере. Не знает нужных вам технологий, а те которые знает, понимает исключительно на уровне использования и не внутренней реализации. С горящими глазами и дрожью в ногах от выпавшего ему шанса.

третий вопрос особенно интересен для меня, так как я пока почти не встречал персон кто сочетает в себе лучшие качества обоих персон. Тут либо первое либо второе, либо не то не се. И сколько бы не писали, что «нам нужные молодые специалисты с горящими глазами, готовые учится» на всех собеседованиях проверяют только гиковую часть спеца.

Спасибо.
Я согласен с тем, что вы написали. Но… сейчас опять хочется взорваться по поводу своего проекта, но я стараюсь убедить себя в том, что у меня действительно нет опыта и я дурак. В итоге я буду либо прав, либо сильно скромным.
И вот тут зарыт главный корень проблемы — разработчики на самом деле не послушные строители. Разработчики — творцы.

Вам в фирме нужен молодой амбициозный, целеустремленны разработчик С++, с опытом работы в 1.5 года?
Потому что на моей, мне предлагают брать пример с дади Вася на заводе, вместо того что бы пытаться что то улучшить. И что все это выдумка, такая же как снежный человек.
всегда мечтал вызывая метод A получить результат работы метода B, это сделает мой код еще более зловеще непонятным :(
еще один шажок к стартреку, когда «действующее окно» с одного монитора можно перебросить на другой просто махнув рукой в нужную сторону.
это я к тому что понял свою ошибку :) почему вот это конструктор копирования B(B&){}; не подходит.
Охтыж демонический разврат
const B b1;


сори :(
А может быть есть способ при такой реализации
// NOT BAD
class NonCopyable {
// blahblahblahpublic:
private:
   // copy and assignment prohibited
   NonCopyable( const NonCopyable& );
   void NonCopyable::operator=( const NonCopyable& );
};


заменить текст ошибки компилятора (или снабдить его дополнительным варнингом) о том, что это не просто забыли дописать тело, а что это именно запрет копирования объектов этого класса.
Почитал ваш пост по ссылке и я видать сильно туплю, но я не понимаю почему

struct A {
  A() {};
  A(A&) {};
};

struct B : public A {
  B() {};
};


int main() {
  const B b1;
  B b2 = b1;
}

Вызывает ошибку.

Ведь вы же сами написали
«Неявно декларированный конструктор копирования для класса X имеет форму X::X (const X&) в том случае, если:
- каждый прямой или виртуальный базовый класс B класса X имеет копирующий конструктор, чей первый параметр - const B& или const volatile B& , и
- у каждого нестатического члена класса X, который имеет тип M (или массив таковых) имеет конструктор копирования первый аргументом которого является const M& или const volatile M&.
!!!
Во всех остальных случаях он имеет форму X::X (X&).
!!!
Конструктор копирования всегда является inline public членом класса»


Так что же мешает компилятору вызвать конструктор копирования
B(B&){};


Если он сам же его и сгенерировал?
Либо вы не правильно интерпретировал стандарт, либо это FAIL в стандарте.
долго и усиленно борюсь с собой пытаясь придумать зачем мне нужно купить планшет. Вроде такая забавная штука, у всех есть… Но что на нем делать? Музыку слушать? так куда удобнее маленький плеер, у которого заряд поболее будет держать (хотя хз). Кино смотреть, так это не очень то и приятно на мини экране, только если уж совсем делать нечего и этого «делать нечего времени» выше крыши… но время то как назло всегда не хватает. Интернет? Так, на работе интернет, дома интернет, еще и между этим интернет?.. так зачем же нужен планшет?
web 3.0 должен унифицировать все. А то не интернет, а помойка. Но это удел Больших мира сего.
Наверно у них еще есть и оговорка, по типу «если вы выкладываете файл на который не имеете права на распространение, то вы в праве выкладывать его только для личного пользования (доступг ограниче для всех кроме вас/вашей учетной записи), и в этом случае, компания X, тоже не имеет никаких прав на этот контент.»

Вы же имеет право скопировать фильм на диск, но только для личного просмотра. Очевидно что и в сети будет тоже самое.
глупость какая. Беря в аренду машину, вы платите временем которое вы проводите за ее рулем?
Автор, я преклоняюсь перед вами :( реверс инжинеригн для меня это, что-то из области недоступной мне в познании. А то, с какой легкостью вы описали процесс решения задач, делает вас в мох глазан… ух хорошим специалистом.
Жаль вы не сможете рассказать сколько вам за такую работу платят. Я даже адекватно оценить не могу сколько за это запросил бы я, если бы была такая возможность.

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность