Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / lock-free модели / 10 сообщений из 10, страница 1 из 1
02.01.2017, 18:12
    #39378943
зеленый админ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lock-free модели
Пртвет! Знакомлюсь с lock-free моделями, наваял тут для себя, но не могу себе объяснить, будет ли оно всегда работать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
#include <QCoreApplication>
#include <mutex>
#include <thread>
#include <vector>
#include <fstream>
#include <iostream>
#include <atomic>

static std::atomic<unsigned int> nLatestProcessed = {0};
static const unsigned int nMaxToProcess = 200;
static const unsigned int nMaxRoot = 4000000000;
//std::mutex mInt;
std::mutex mOutput;

unsigned int IncreaseLatestNum()
{
  //std::lock_guard<std::mutex> lk(mInt);
  return nLatestProcessed.fetch_add(1, std::memory_order_relaxed);
}

void ProcessNumber()
{
  unsigned int ToProcess;
  unsigned long long x;
  unsigned long long y;
  unsigned long long z;

  do {
    ToProcess = IncreaseLatestNum();
    if (ToProcess >= nMaxToProcess) {
        break;
    }
    z = sqrt(ToProcess);
    if (z*z == ToProcess) {
        continue;
    }
    for (x = 1; x < nMaxRoot; ++x) {
        y = x*x*ToProcess + 1;
        z = sqrt(y);
        if (z*z == y) {
          std::lock_guard<std::mutex> lk(mOutput);
          std::cout << std::this_thread::get_id() << ": " << ToProcess << ": (" << z << ", " << x << ")" << std::endl;
          break;
        }
    }
    if (x == nMaxRoot) {
        std::lock_guard<std::mutex> lk(mOutput);
        std::cout << std::this_thread::get_id() << ": " << ToProcess << ": (none, none)" << std::endl;
        break;
    }
  }
  while (true);
}

int main(int argc, char *argv[])
{
    std::vector<std::thread> v;

    QCoreApplication a(argc, argv);

    for (unsigned int var = 0; var < std::thread::hardware_concurrency(); ++var) {
      v.push_back(std::thread(ProcessNumber));
    }

    std::for_each(v.begin(),v.end(), std::mem_fn(&std::thread::join));

    std::cout << "done" << std::endl;
    return a.exec();
}



Интересует атомарка nLatestProcessed: обойдут ли все потоки все значения до 200 ровно по разу?
...
Рейтинг: 0 / 0
02.01.2017, 18:27
    #39378946
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lock-free модели
зеленый админИнтересует атомарка nLatestProcessed: обойдут ли все потоки все значения до 200 ровно по разу?
Каждое значение от 0 до 199 будет обработано по одному разу.
...
Рейтинг: 0 / 0
02.01.2017, 18:31
    #39378948
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lock-free модели
Код: plaintext
1.
2.
  unsigned int ToProcess;
  unsigned long long x;


Чтобы много букав не писать можно так
Код: plaintext
1.
2.
3.
4.
#define <stdint.h>
...
  uint32_t ToProcess;
  uint64_t x;
...
Рейтинг: 0 / 0
02.01.2017, 19:23
    #39378954
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lock-free модели
зеленый админПртвет! Знакомлюсь с lock-free моделями, наваял тут для себя, но не могу себе объяснить, будет ли оно всегда работать:

Коллеги. Я не понимаю - какой смысл ваять "что-то" без пояснения и спрашивать потом - "будет-ли оно работать" ?

Если вы опирались на tutorial или какой-то пример из книги - то опубликуйте.

Если вы на 100% являетесь автором кода - то НАМ имеет смысл подвергать сомнению
каждую строчку ВАШЕГО кода начиная с самой первой и даже сомневаться в полезном эффекте.

У вашего приложения есть полезный эффект? Что оно делает?
...
Рейтинг: 0 / 0
02.01.2017, 20:02
    #39378957
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lock-free модели
mayton, в коде полезных 4-5 строк, остальное шлак. Но когда учишься нельзя написать без шлака. Главное что вопрос он поставил корректно. ИМХУ все нормально, протри свой хрустальный шар :)
...
Рейтинг: 0 / 0
02.01.2017, 20:09
    #39378958
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lock-free модели
Dima T, даже в своих tutorials я всегда старался искать смысл или решать известную задачу.
Хотя-бы гонять лошадь по шахматной доске.

Ведь не нужно много ума чтобы взять известные олимпиадные задачи и развернуть их
в API мультипоточности или параллелизма?
...
Рейтинг: 0 / 0
02.01.2017, 20:19
    #39378963
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lock-free модели
maytonDima T, даже в своих tutorials я всегда старался искать смысл или решать известную задачу.
Хотя-бы гонять лошадь по шахматной доске.

Ведь не нужно много ума чтобы взять известные олимпиадные задачи и развернуть их
в API мультипоточности или параллелизма?
Тут нет заумностей, просто слова типа "lock-free" не в тему упомянуты. По простому вопрос ТС звучит так: правда что IncreaseLatestNum() каждый раз вернет уникальное значение при вызове ее из любого потока. Да, правда.
...
Рейтинг: 0 / 0
02.01.2017, 23:59
    #39379024
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lock-free модели
Dima TПо простому вопрос ТС звучит так: правда что IncreaseLatestNum() каждый раз вернет уникальное значение при вызове ее из любого потока. Да, правда.
Ну слава богу.

ТС мог-бы просто спросить это без тонны кода.
...
Рейтинг: 0 / 0
04.01.2017, 13:39
    #39379487
OoCc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lock-free модели
maytonDima TПо простому вопрос ТС звучит так: правда что IncreaseLatestNum() каждый раз вернет уникальное значение при вызове ее из любого потока. Да, правда.
Ну слава богу.

ТС мог-бы просто спросить это без тонны кода.
Топик-то интересный. Особенно если ТС дойдет до более сложных "моделей". Например очередь.
...
Рейтинг: 0 / 0
04.01.2017, 13:52
    #39379489
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lock-free модели
OoCcОсобенно если ТС дойдет до более сложных "моделей". Например очередь.
На хабре есть ряд статей про lock-free, в т.ч. про очереди. Думаю ТСу не помешает их почитать.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / lock-free модели / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]