Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2015, 21:59   #11
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

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

А семафор от мьютекса не этим отличается.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 27.10.2015 в 22:06.
Alex11223 вне форума Ответить с цитированием
Старый 27.10.2015, 22:07   #12
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Вообще от вспомнилось что можно между процессами делать общие данные. Хорошо бы чтобы одна программа считала данные из файла и к ним могли бы обратиться другие программы. Типо сделать как в потоках глобальные данные.
ninja2 вне форума Ответить с цитированием
Старый 27.10.2015, 22:10   #13
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

а как сделать через мутекс ? Нашол пример кода
Код:
private static Mutex mut = new Mutex();
            mut.WaitOne(1000);
            mut.ReleaseMutex();
создаем мутекс, WaitOne блокируем поток, а mut.ReluaseMutex() освобождаем так чтоли?

Щас смоделирую, запусщю две программы одной заблокирую, а другой попробую прочитать файл и что то мне кажется она прочитает файл
ninja2 вне форума Ответить с цитированием
Старый 27.10.2015, 22:13   #14
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Задача-то исходная в чем состоит? Что за извращение вы пытаетесь сделать с файлом и процессами?
http://www.gunsmoker.ru/2008/10/x-y-z.html

А синхронизация нужна для любых ресурсов используемых разными потоками, не только файлов.

Цитата:
Щас смоделирую, запусщю две программы одной заблокирую, а другой попробую прочитать файл и что то мне кажется она прочитает файл
Да и так понятно что будет, надо внимательнее изучать документацию, особенно разные варианты конструкторов.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 27.10.2015 в 22:17.
Alex11223 вне форума Ответить с цитированием
Старый 27.10.2015, 22:18   #15
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Цитата:
А не важно какому процессу потоки принадлежат - одному или разному - мьютексу без разницы
Щас проверим. Пример на msdn есть, там он для потоков, щас для процессов
протестим.

Вот код тестовый, блокирую как бы код, а из копии программы также вызывает вывод dddd, а должно вызывать что заблокировано.
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;//подключаем библиотеку для работы с файлами
using System.Threading;

namespace WindowsForms_test
{
    public partial class Form1 : Form
    {
        //создаем мьютекс
        private static Mutex mut = new Mutex();
        public Form1()
        {
            InitializeComponent();
        }

        private void button_Start_Click(object sender, EventArgs e)
        {
            if(mut.WaitOne(1000))
            {
                MessageBox.Show("ddddd");
                //занимаем мютекс
            //    Thread.Sleep(70000);
            }
            else
            {
                MessageBox.Show("Не удалось полуить mut");
            }
        }

        private void button_Stop_Click(object sender, EventArgs e)
        {
            mut.ReleaseMutex();
            //    fstream.Close();
            MessageBox.Show("Stop");
        }
    }
}

Последний раз редактировалось ninja2; 27.10.2015 в 22:29.
ninja2 вне форума Ответить с цитированием
Старый 27.10.2015, 22:30   #16
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Цитата:
Да и так понятно что будет, надо внимательнее изучать документацию, особенно разные варианты конструкторов.
Щас посмотрим что там за конструкторы

Да работает, нужно чтобы поток владельшем не был и идентификатор задать.
Код:
private static Mutex mut = new Mutex(false,"id333");

Последний раз редактировалось ninja2; 27.10.2015 в 22:37.
ninja2 вне форума Ответить с цитированием
Старый 27.10.2015, 22:34   #17
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
Наверно ты ошибся, мютек синхронизирует потоки, а не процессы, а у меня процессы нужно синхронизировать, вот цитата из википедии
нет, не ошибся, мьютекс доступен глобально.

вот вам даже пример решения схожей с вашей задачи с помощью мьютекса (правда на плюсах, но суть та же) http://www.firststeps.ru/mfc/winapi/r.php?9

p.s. блин, все обсуждение пропустил)
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 27.10.2015, 22:41   #18
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
нет, не ошибся, мьютекс доступен глобально.
Да ты прав, все отлично работает.

Хорошо бы еще как то переменную создать к которой смогут обращаться процессы. Мб. кто то знает как такое сделать.

От допустим запускаем одну копию программы и создается переменная. Запускаем вторую копию программы и она видит эту переменную и использует ее. типо эмитация потоков.

Какждый раз файл читать не сильно мб. удобно, проще в памяти хранить массив с данными и в нем уже шарить. )))
ninja2 вне форума Ответить с цитированием
Старый 27.10.2015, 22:48   #19
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Цитата:
Задача-то исходная в чем состоит? Что за извращение вы пытаетесь сделать с файлом и процессами?
Там где программа лежит, есть файл со списком проксисерверов и каждая копия программы должна из этого файла брать прокси и чтобы они одновременно его не читали и не взяли 2 одинаковых, нужно как то читать и помечать сами прокси, что занят или упал. Еще нужно поток создать который будет каждый раз проверять эти прокси на доступность и помечать их что доступны или нет (сайт через время может разблокировать прокси).

В потоках это проще сделать. Читал в книге что есть механизм что что можно и между процессами даными обмениваться он как то называется email-адресация или хз. То книга старая была 2003 год, щас уже 2015, наверняка есть что то. Как создать общую переменную между процессами?
ninja2 вне форума Ответить с цитированием
Старый 27.10.2015, 22:50   #20
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Какждый раз файл читать не сильно мб. удобно, проще в памяти хранить массив с данными и в нем уже шарить
CreateFileMapping + гугл
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Блокирование события Gagapsha JavaScript, Ajax 5 19.02.2014 18:06
Блокирование файла Balabek Общие вопросы C/C++ 10 20.07.2012 14:27
Блокирование ALT+F4 Killbrum Win Api 5 14.03.2009 12:23
Блокирование клавиатуры Milly Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 18.10.2007 19:15
блокирование функции Fireleo Win Api 5 29.07.2007 17:04